我刚刚将我的 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 混淆。