1

我将 Ninject 2 与 ASP.NET MVC Web 应用程序一起使用。所有依赖项都在堆栈中正确处理(Controllers->Services->Repositories)。但是,我在服务项目中有一些不在那个“链”中的类,我也想在应用程序启动时注入这些类。如何让 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>();
        ....
    }
}
4

2 回答 2

2

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

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

于 2009-12-19T00:05:06.413 回答
0

您是否覆盖 CreateKernel()?您需要这样做并在那里进行绑定。

于 2009-12-18T23:01:09.090 回答