Je viens de mettre à jour mon projet MVC2 vers MVC3 et j'ai utilisé la référence du paquet de la bibliothèque NuGet pour installer ninject. Cela a créé une classe appstart et j'ai utilisé le code suivant pour injecter ma classe IMembershipService.Objet Ninject ne liant pas dans BaseController dans MVC3
public static void RegisterServices(IKernel kernel) {
kernel.Bind<IMembershipService>().To<AccountMembershipService>();
}
Cela fonctionne très bien avec mon HomeController, par exemple. Cependant, j'utilise un BaseController. Presque le même code dans la classe de base ne fonctionne plus.
public class BaseController : Controller
{
public IMembershipService MembershipService { get; set; }
public UserService UserService { get; set; }
public BaseController() : this(null, null) { }
public BaseController(IMembershipService service, UserService userService)
{
MembershipService = service;
UserService = userService ?? new UserService();
}
Si je casse le constructeur du contrôleur de base, le service est juste NULL. Je n'ai jamais utilisé Ninject pour IOC, alors peut-être que la réponse est évidente, mais pourquoi n'injectera-t-il pas mon AccountMembershipController dans la classe de base comme je le veux? Je ne vois pas ce qui est différent, bien que je me rende compte que le niveau supplémentaire d'héritage peut être en train de jouer avec Ninject en quelque sorte.
Donc, vous faites essentiellement cela dans chaque sous-classe? public HomeController (service IMembershipService): base (service) {} –
Oui, juste comme ça. –
Intéressant, qui peut être un peu bâclé si vous avez beaucoup de services et de contrôleurs, je peux simplement mettre hors tension le Ninject pour l'instant, ou utiliser un conteneur différent. Merci. –