2011-03-06 5 views
0

Я не думаю, что это будет проблемой первоначально, но, как я получаю исключения думал, что пост здесь упаковывают им быть идиотом ...Ninject несколько модулей

У меня есть 2 классов модуля, один настраивает NHibernate и один устанавливает MVC контроллеры, теперь у меня есть проблема в том, что у меня есть кое-что, как показано ниже:

public class NHibernateModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<ISessionManager>().To<SessionManager>(); 
    } 
} 

public class ControllerModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<SomeController>().ToSelf() 
          .WithConstructorArgument("sessionManager", Kernel.Get<ISessionManager>()); 
    } 
} 

Всякий раз, когда я пытаюсь использовать контроллер, он просто бомбы из говорили мне, что его проблемы, имеющие обязательный аргумент sessionManager. Я уверен, что в списке есть модуль Nhibernate перед модулем Controller, когда я создаю ядро.

Есть ли что-нибудь сразу глупо в том, что я делаю выше?

+0

я был общей MUPPET, он заканчивает тем, что один из моих параметров был неправильный sessionKey! = sessionkey. Хотя я узнал, что Ninject может вывести параметры, а не меня, чтобы набирать их все ... – Grofit

ответ

0

Предполагая:

public class SomeController : Controller 
{ 
    private readonly ISessionManager _sessionManager; 
    public HomeController(ISessionManager sessionManager) 
    { 
     _sessionManager = sessionManager; 
    } 

    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

Следующее должно быть достаточным:

public class NHibernateModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<ISessionManager>().To<SessionManager>(); 
    } 
} 

public class ControllerModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<SomeController>().ToSelf(); 
    } 
} 

и в Global.asax:

public class MvcApplication : NinjectHttpApplication 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 

    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

    } 

    protected override void OnApplicationStarted() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 
    } 

    protected override IKernel CreateKernel() 
    { 
     var modules = new INinjectModule[] 
     { 
      new NHibernateModule(), 
      new ControllerModule() 
     }; 

     return new StandardKernel(modules); 
    } 
} 
+0

Вы довольно спокоен, я не знал, что Ninject может автоматически вывести параметры, это очень мило. Я не использую NinjectHttpApplication, хотя, поскольку мне не нравится привязанный к нему материал Http, поэтому вместо этого используйте DependencyResolver. Попробуем попробовать, хотя спасибо! – Grofit

+0

Просто дал ему пойти и получить «System.MissingMethodException: для объекта нет конструктора без параметров». Реализация ISessionManager имеет некоторую инъекцию конструктора, но все они заботятся в модуле NHibernate, и я не думал, что это имеет значение, поскольку это может усложнить вопрос. – Grofit

Смежные вопросы