【发布时间】:2020-10-19 19:55:18
【问题描述】:
我正在做一个宠物项目来练习我的 .NET Core。我正在使用一个带有内置依赖注入框架的 Web 应用程序项目,就像这样
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IProductRepository, ProductRepository>();
< ... other code ... >
}
它迫使我将包含ProductRepository 实现的Data 项目的引用添加到我的WebApplication 项目中。这意味着稍后WebApplication 项目将需要引用所有其他项目并且可以滥用它——我什至不希望 Web 知道存储库,一切都应该通过服务完成。
我的问题是 - 我可以避免使用内置 DI 引用 WebApplication 中的所有其他项目吗?
(我知道我可以使用其他 DI 容器来解决这个问题)。
【问题讨论】:
-
你可以,但只是有点。除非您愿意在运行时手动加载库,否则入口点(您的应用程序)将始终依赖于存储库 dll
-
另一层抽象可能是要走的路?就像你说的与服务交互。据说共享一个通用或核心库是一种非常普遍的做法。
-
你不需要显式引用repo项目,ASP.NET Core间接隐式引用。
-
没有什么好方法,但如果你绝对不能相信你的团队能够在拉取请求期间嗅出架构侵蚀,比如不需要的命名空间,并且不能使用其他 DI 容器来解决这个问题,请考虑类似github.com/BenMorris/NetArchTest
-
谢谢大家!它看起来确实像重复,谢谢@Steven。我无法用谷歌搜索那个。我应该删除这个问题吗?
标签: c# asp.net-core dependency-injection