在ASP.NET MVC应用程序中使用Ninject 2时的注入问题

时间:2009-12-18 22:54:08

标签: asp.net-mvc ninject

我正在使用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>();
        ....
    }
}

2 个答案:

答案 0 :(得分:2)

为了让Ninject注入依赖项,您必须使用内核创建对象。对于自然依赖链中的对象(即在您的应用程序中,Controllers-&gt; Services-&gt; Repositories)来说,这很容易,但对于那些外部的人来说可能很棘手。

您必须添加其他类型作为在自然链中创建的其中一种类型的依赖项,或者以某种方式获取内核上的钩子并调用Get&lt; T&gt;。为此,您可能必须使用静态服务定位器。

答案 1 :(得分:0)

你是否重写CreateKernel()?你需要这样做并在那里进行绑定。