Я только что обновил свой проект MVC2 до MVC3 и использовал ссылку на пакет библиотеки NuGet для установки ninject. Это создало класс appstart, и я использовал следующий код для внедрения моего класса IMembershipService.
public static void RegisterServices(IKernel kernel) {
kernel.Bind<IMembershipService>().To<AccountMembershipService>();
}
Это прекрасно работает с моим HomeController, например.
public class HomeController : Controller
{
public IMembershipService MembershipService { get; set; }
public HomeController() : this(null) { }
public HomeController(IMembershipService service)
{
MembershipService = service;
}
ОДНАКО, я использую BaseController. Почти тот же код в базовом классе больше не работает.
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();
}
Если я сломаюсь в конструкторе базового контроллера, сервис будет просто NULL. Я никогда не использовал Ninject для IOC, поэтому, возможно, ответ очевиден, но почему он не внедрит мой AccountMembershipController в базовый класс, как я этого хочу? Я не вижу, что отличается, хотя я понимаю, что дополнительный уровень наследования может как-то портить Ninject.