wvd*_*ten 8 architecture n-tier-architecture visual-studio .net-core
鉴于我有一个 .NET Core 2.0 应用程序,我还有一个 Web 程序集、一个业务程序集和一个 DataAccess 程序集。
我不希望 Web 程序集直接引用我的 DataAccess 程序集(其中包含我的实体框架内容)。这是为了防止 Web 程序集采取快捷方式并直接与 DbContext 对话。
所以我有我的 Web 引用业务和业务引用 DataAccess。
现在由于一些奇怪的原因,在我的 Web 项目中的 Controllers 中,我仍然可以直接访问DbContext,因为它在我的 DataAccess 项目中被标记为 public,并且显然它是通过某种形式的嵌套引用提供给 Web 项目的。
我想一个类似的主题是这个:https : //github.com/aspnet/Mvc/issues/6635但我在 Stack Overflow 上找不到太多关于这个主题的信息。
有没有什么优雅的方法可以防止顶级项目访问这些嵌套的依赖项?
为了防止您的 DataAccess 层在 Web 层中可见,您应该将 PrivateAssets 元素放入业务层的 .csproj 文件中。就像下面的代码一样。
<ItemGroup>
<ProjectReference Include="..\GiveAway.Data\GiveAway.Data.csproj">
<PrivateAssets>all</PrivateAssets>
</ProjectReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
您可以在这里阅读有关 PrivateAssets 元素的更多信息:https://learn.microsoft.com/en-us/dotnet/core/tools/csproj
小智 -5
这就是为什么您使用接口而不是具体对象进行注入。您不应该在 DataAccess 程序集之外泄漏对 DBContext 的引用。这意味着您与较高层中的底层数据库有太多耦合。
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |