防止.NET核心嵌套项目引用

时间:2017-09-14 10:13:16

标签: .net visual-studio architecture .net-core

鉴于我有一个.NET Core 2.0应用程序的情况 我还有一个Web程序集,一个Business程序集和一个DataAccess程序集。

我不希望Web程序集直接引用我的DataAccess程序集(其中包含我的Entity Framework内容)。这样可以保护Web程序集不会使用快捷方式并直接与DbContext交谈。

所以我的Web引用业务和业务引用了DataAccess。

现在由于一些奇怪的原因,在我的Web项目的控制器中,我仍然可以直接访问DbContext,因为这在我的DataAccess项目中被标记为公共,显然它是通过某种形式的嵌套提供给Web项目的引用。

我想这一个类似的话题是:https://github.com/aspnet/Mvc/issues/6635但我在Stack Overflow上找不到这个主题。

是否有任何优雅的方法可以阻止顶层项目访问这些嵌套依赖项?

2 个答案:

答案 0 :(得分:2)

为了防止从Web层显示DataAccess层,应将PrivateAssets元素放在业务层的.csproj文件中。就像下面的代码一样。

<ItemGroup>
 <ProjectReference Include="..\GiveAway.Data\GiveAway.Data.csproj">
   <PrivateAssets>all</PrivateAssets>
 </ProjectReference>
</ItemGroup> 

在这里您可以阅读有关PrivateAssets元素的更多信息:https://docs.microsoft.com/en-us/dotnet/core/tools/csproj

答案 1 :(得分:0)

这就是您使用接口而不是注入具体对象的原因。您不应该在DataAccess程序集之外泄漏对DBContext的引用。这意味着您与更高层中的底层数据库的耦合太多。