首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >洋葱体系结构中九元模块的设置范围

洋葱体系结构中九元模块的设置范围
EN

Stack Overflow用户
提问于 2015-12-12 13:33:51
回答 1查看 436关注 0票数 1

我在Visual中有多个项目,每个程序集都有一个尼尼微模块定义。这个解决方案的结构是“洋葱架构”。模块仅在带有程序集引用的项目中加载。

我有这些图层

  • 存储库
  • BusinessLayer
  • 网络用户界面

目前,Web层不需要引用存储库,因为BusinessLayer get的Ninject Moduleloader所有引用的绑定都来自Repository-Moduleloader

我的存储库层没有对ASP.Net程序集的任何引用。因此,我不能将NinjectModules的范围设置为"InRequestScope“。我现在正试图在WebUI层中设置ModuleLoader的配置,但是存储库的模块仍然不是"InRequestScope“。

代码语言:javascript
复制
private static void RegisterServices(IKernel kernel) {           
    kernel.Bind(i => i.From("*.dll")
    .SelectAllClasses()
    .BindDefaultInterface()
    .Configure(x => x.InRequestScope()));

    kernel.Load(new BusinessLayer.BusinessLayerModuleLoader());
    kernel.Load(new WebUIInjector());
}
  1. 为什么这个配置不能处理由BusinessLayerModuleLoader本身加载的模块?
  2. 第一个语句是只绑定配置,还是已经从“NinjectModules”找到的所有程序集加载*.dll?在这种情况下,我不需要第二个语句“kernel.Load(新的BusinessLayer.”)对吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-14 10:35:56

第一个语句(kernel.Bind(i => i.From(....));)是搜索所有已部署的*..dll的类型,这些类型具有与“默认接口”约定相匹配的接口,即: Typename以接口名称结尾(没有前面的I),例如:"Foo -> IFoo“、"Bar -> IBar”、"SomeFoo : IFoo“。它不加载任何模块。

Kernel.Load运行NinjectModule的Load方法,该方法可以添加其他绑定。首选的选择是使用kernel.Load<BusinessLayer.BusinessLayerModuleLoader>()并将其命名为BusinessLayerModule而不是BusinessLayerModuleLoader

要加载所有已部署的dll的所有模块,请运行:kernel.Load("*.dll");。有关模块和模块加载的更多信息,请参见:https://github.com/ninject/Ninject/wiki/Modules-and-the-Kernel

注意:如果一个模块要执行Bind<IFoo>().To<Foo>(),那么IFoo将有2个绑定,因为约定已经对它进行了绑定。这将导致带有消息...more than one matching binding available......more than one matching binding available...

提示:关于如何参数化在NinjectModule中应用的作用域的问题,以前曾有人问过。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34240411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档