如何将 NinjectModule 与 Ninject.MVC 和多层一起使用?

How to use NinjectModule with Ninject.MVC and multiple layers?

我的应用程序中有四个层,其中服务层是上下文根:

Presention
    |
    |
Services (Context Root)
    |
    |
Repository
    |
    |
Data

我将 Ninject MVC 用于表示层特定项目,并且我在服务层(上下文根)中注册了所有其他内容。 但是,我的数据层有一些我想在该层中注册的特定于数据层的服务。目前我的服务层不知道我的数据层,我认为没有真正的理由要求这样做。有没有办法使用 Ninject 模块一次性注册所有继承自 Ninject 模块的 IOC 容器?

附带说明一下,我在项目中使用了 Telerik,因此我无法使用反射来获取从 NinjectModule 继承的所有对象。 Telerik 的 Ninject 模块版本已被密封或无法访问和重新注册。

Ninject IKernel 接口有一个 Load() 方法,该方法将程序集列表作为参数。它将在这些程序集中搜索任何 INinjectModule 并加载它们。

否则,检查 Ninject Conventions 项目。我正在使用它来自动绑定实现我自己的 IDependency:

的任何 class
        Kernel.Bind( scanner =>
        {
            scanner.From( assemblies )
                .Select( t => t.Is<IDependency>() )
                .BindAllInterfaces()
                .ConfigureFor<ISingletonDependency>( config => config.InSingletonScope() )
                .ConfigureFor<IRequestDependency>( config => config.InRequestScope() );
        } );