加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

.net – n层应用程序中的依赖注入?

发布时间:2020-05-24 02:22:38 所属栏目:程序设计 来源:互联网
导读:我有一个3层的.NET服务应用程序,它遵循标准方法: Frontend - Object Model / Business Logic - Data Access 我一直在努力学习依赖注入,到目前为止已经发现它很棒(使用Autofac). 3层中的每一层都需要创建各种各样的对象,有时需要额外的配置/等.似乎DI容器应该

我有一个3层的.NET服务应用程序,它遵循标准方法:

Frontend -> Object Model / Business Logic -> Data Access

我一直在努力学习依赖注入,到目前为止已经发现它很棒(使用Autofac). 3层中的每一层都需要创建各种各样的对象,有时需要额外的配置/等.似乎DI容器应该是解决这个问题的理想选择,但是我遇到了一些问题,看看它应该与系统的其他部分相关.

目前我在前端有一个类来配置DI容器.它基本上是一大堆代码,说容器.Register< SomeType>()等等.

问题是,它正在为所有3层配置容器,因此必须具有对数据访问层的相当侵入性的知识.在我的前端有这样的知识的代码在我的头脑中引起了警钟,因为将应用程序分成层级的关键是避免这种情况.
由于我的数据访问层不仅仅是SQL服务器是一个笨拙的桶,而是由许多复杂的COM互操作和P / Invoke调用组成,所以这也变得更糟,因此对DI有很大的影响组态.

我已经考虑过将其分解 – 可能每层有一个容器,或者每层都有一个“Setup”类与全局DI容器对话以注册它自己的位,但我不确定这是否会导致比它解决的问题更多……

如果有人可以分享他们使用DI与多层应用程序的经验,我将非常感激.

谢谢,猎户座.

这取决于您是否有三层(物理分离)或所有逻辑层是否一起部署.如果前端与BL分开并通过Web服务或WCF进行通信,那么前端和后端需要自己的容器,因为它们在不同的进程或单独的机器上运行.容器只会注册自己的组件和“下一个”层的接口.

另一方面,如果所有图层都在同一个进程中运行,那么您应该只有一个容器.容器将初始化并托管在应用程序的起始点,如web应用程序的global.asax.

容器主机知道系统的所有不同部分的问题可以通过不逐个注册类来解决,而是在程序集中注册所有类型.这样,只需配置容器,就不需要对解决方案中的所有程序集进行强引用.如何使用Castle Winsdor完成此操作:

Kernel.Register(AllTypes.Pick().FromAssemblyName("DataAccessLayer.dll"));
Kernel.Register(AllTypes.Pick().FromAssemblyName("BusinessLogic.dll"));

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读