Теоретически, единственное место, чтобы использовать DI контейнер в настройках проекта. В в случае проекта ASP.NET MVC, который будет использоваться в методе Application_Start в Global.asax. Для моего проекта я использую контроллер на основе NInject ControllerFactory для создания контроллеров по мере необходимости, а затем контроллеры имеют любые зависимости, которые им нужны в своих конструкторах поэтому NInject соответствующим образом подключает их.
мой global.asax:
private static IKernel kernel = new StandardKernel();
protected void Application_Start()
{
kernel.Bind<IRepository<User>>().To<NHibernateRepository<User>>();
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory(kernel));
}
и мой NInjectControllerFactory:
public class NinjectControllerFactory : System.Web.Mvc.DefaultControllerFactory
{
private IKernel container;
public NinjectControllerFactory(IKernel container)
{
this.container = container;
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType != null)
{
IController controller = container.Get(controllerType) as IController;
Check.Require(controller, "Could not instantiate controller type: {0}", controllerType.FullName);
return controller;
}
return base.GetControllerInstance(requestContext, controllerType);
}
}
примечание, чтобы использовать NinjectHttpApplication, вам нужен код расширения: http://github.com/ninject/ninject.web.mvc –
Это то, что я хотел бы также рекомендовать... – Haroon