【问题标题】:Preventing .NET Core Nested Project References防止 .NET Core 嵌套项目引用
【发布时间】:2017-09-14 10:13:16
【问题描述】:

鉴于我有一个 .NET Core 2.0 应用程序 我还有一个 Web 程序集、一个业务程序集和一个 DataAccess 程序集。

我不希望 Web 程序集直接引用我的 DataAccess 程序集(其中包含我的实体框架内容)。这是为了保护 Web 程序集不走捷径并直接与 DbContext 对话。

所以我有我的 Web 引用 Business 和 Business 引用 DataAccess。

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

我想类似的主题是这个:https://github.com/aspnet/Mvc/issues/6635 但我在 Stack Overflow 上找不到太多关于这个主题的内容。

有没有什么优雅的方法可以防止顶层项目访问这些嵌套的依赖关系?

【问题讨论】:

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


    【解决方案1】:

    为了防止您的 DataAccess 层从 Web 层可见,您应该将 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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • Rob,这不是问题所在。我所做的一切都是抽象的。但为了首先使用实体​​框架代码,我需要一个公共 DbContext。我在我的 DataAccess 程序集中移动了所有与 DataAccess 相关的项目...但是我可以直接从 Web 项目访问我的 DbContext,因为 .NET Core 允许我直接从其自己的项目依赖项中递归地访问所有依赖项。
      猜你喜欢
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      相关资源
      最近更新 更多