首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于DI的软件3层体系结构

基于DI的软件3层体系结构
EN

Software Engineering用户
提问于 2019-08-27 10:25:51
回答 2查看 725关注 0票数 2

我正在构建带有3层体系结构和asp.net核心的软件,正如您所知道的,依赖注入是内置到Asp.net内核中的

如我所知,3层架构图如下所示:

根据上面的图表,数据访问层和用户界面层之间没有任何直接的联系。

我的项目是:

我的问题是,如果UI和Dal之间没有直接联系,我们如何在UI层中将DAL注册为服务?

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2019-08-27 10:33:55

应用程序的入口点( UI项目)必须设置DI容器,提供所有依赖项的实现。这就是为什么它必须与所有其他项目有直接的联系(引用)。

重要的是UI类只依赖于BLL类。附加引用仅用于设置DI。

票数 4
EN

Software Engineering用户

发布于 2019-09-02 13:15:30

第一点--为了简单起见,Rumen的回答是正确的。

我在更大的解决方案中所做的是有一个单独的基础设施项目,它设置依赖注入容器(在.net核心中,这将是IServiceCollection)。

例如,在我目前的解决方案中,我有一个网站&一个API。在我的基础设施项目中,这两个调用方法都是用来设置依赖注入的。在我的UI项目中,我可以决定我想要设置哪些依赖项,而不需要知道代码。例如:

  • 对于测试,我可以使用一个名为"AddMockRepositories“的扩展方法,例如"_serviceCollection.AddMockRepositories()”
  • 对于开发,我可以使用"AddRepositories(connectionString)“
  • 在生产中,我可以使用"AddCachedRepositories(connectionString,objectCache)“

这种方法有两个优点:

  1. 所有DI代码都在一个项目中--我们可以在其他项目之间共享这个代码,而不会重复任何代码。这包括能够共享缓存代码,这是非常有用的。
  2. UI项目不必引用DAL。这意味着没有人可以从UI项目中直接引用DAL,不管是否偶然。

顺便说一句,我不确定这对其他DI框架的转换效果如何。我猜想它们都设置了类似的依赖项,但我只使用本机.net核心依赖项注入完成了上面的操作。

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

https://softwareengineering.stackexchange.com/questions/396551

复制
相关文章

相似问题

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