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

时间:2015-03-02 13:43:08

标签: ninject

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

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

我正在使用Ninject MVC作为Presention图层特定项目,我在服务层(上下文根)中注册了其他所有内容。 但是,我的数据层有一些我希望在该层中注册的数据层特定服务。目前,我的服务层并不了解我的数据层,我认为没有理由将其作为一项要求。有没有办法使用Ninject Modules注册一次从Ninject模块继承的所有IOC容器?

另一方面,我在项目中使用Telerik,因此我无法使用反射来获取从NinjectModule继承的所有对象。 Telerik的NinjectModule版本要么已密封,要么无法访问和重新注册。

1 个答案:

答案 0 :(得分:1)

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

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

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