Théoriquement, le seul lieu d'utiliser un conteneur de DI est dans la configuration du projet. En le cas d'un projet ASP.NET MVC, qui serait dans la méthode Application_Start de Global.asax Pour mon projet, j'utilise un ControllerFactory basé sur NInject pour instancier les contrôleurs selon les besoins, puis les contrôleurs ont toutes les dépendances dont ils ont besoin dans leurs constructeurs donc NInject les accroche de manière appropriée
mon 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));
}
et mon 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);
}
}
note, à utiliser NinjectHttpApplication, vous aurez besoin du code d'extension: http://github.com/ninject/ninject.web.mvc –
C'est ce que je aussi recommander... – Haroon