我正在使用Ninject 2和ASP.NET MVC Web应用程序。所有依赖关系都在堆栈中正确处理(Controllers-> Services-> Repositories)。但是我在Services项目中有一些类不在那个“链”中,我也想在应用程序启动时注入它们。如何让Ninject识别它们?我有具有[Inject]
属性的公共属性,但是当应用程序运行时,它们为空。我错过了什么?
这是我的MvcApplication类:
public class MvcApplication : NinjectHttpApplication
{
protected override void OnApplicationStarted() {
RegisterRoutes(RouteTable.Routes);
RegisterAllControllersIn(Assembly.GetExecutingAssembly());
}
protected override IKernel CreateKernel() {
var modules = new INinjectModule[] {
new Services.ServiceModule(),
new Data.DataModule()
};
var kernel = new StandardKernel(modules);
return kernel;
}
// route registration removed
}
我仔细检查了两个模块,以确保存在正确的绑定。
模块中的示例:
public class ServiceModule : NinjectModule
{
public override void Load() {
Bind<IAccountService>().To<AccountService>();
....
}
}
答案 0 :(得分:2)
为了让Ninject注入依赖项,您必须使用内核创建对象。对于自然依赖链中的对象(即在您的应用程序中,Controllers-&gt; Services-&gt; Repositories)来说,这很容易,但对于那些外部的人来说可能很棘手。
您必须添加其他类型作为在自然链中创建的其中一种类型的依赖项,或者以某种方式获取内核上的钩子并调用Get&lt; T&gt;。为此,您可能必须使用静态服务定位器。
答案 1 :(得分:0)
你是否重写CreateKernel()?你需要这样做并在那里进行绑定。