【问题标题】:How to use Separate Repository and Service layer assemblies in ASP.NET Core apps如何在 ASP.NET Core 应用程序中使用单独的存储库和服务层程序集
【发布时间】:2017-07-18 10:58:00
【问题描述】:

在使用 ASP.NET Core 应用程序时,我似乎找不到创建单独的服务层和存储库层程序集的好方法。我正在尝试使用 EntityFrameworkCore 和 Azure 存储来做到这一点。我发现了一些解决方法,他们将 .Net Core 应用程序用作程序集,但它也给我带来了各种其他问题。

任何帮助将不胜感激。

【问题讨论】:

  • 你没有写出问题所在。它与任何其他框架或堆栈没有什么不同(除了dotnet/Powershell 命令的限制仅在其应用程序时工作)

标签: asp.net-core asp.net-core-mvc repository-pattern service-layer


【解决方案1】:

设置多层应用程序。

需要注意的几点:

  • 强大之处在于抽象,能够轻松替换层。
  • 一个层/项目有依赖,不能有循环依赖!

假设您的主项目具有 Db 模型和控制器,而 DataAccessLayer 具有服务。那么 DataAccessLayer 需要来自主项目的模型,而 Controller 需要来自 DataAccessLayer 的服务,从而创建循环依赖。

项目结构

一个简单的抽象设置可以是:

  • DbModels 项目(仅包含等同于数据库表的简单对象)
  • IDataAccess 项目包含 DataAcess 服务的所有接口。 (需要依赖 DbModel)
  • DataAccessLayer 项目,IDataAccess 的实现。依赖项:IDataAccess & DbModels
  • Toplayer 项目:包含 webApi/controllers。依赖项:IDataAccess、DbModels 和 IDataAccess 的实现,在本例中为 DataAccessLayer。

DataAccessLayer 当然需要 EntityFramework 作为参考。 DatabaseContext 也应该在这个项目中(以及数据库迁移)。

还要确保使用 DI/IOC 容器来注册和解析服务。

这将是您对存储库项目的设置。

你还遇到了什么问题?

为什么是存储库模式:

感谢microsoft

正如您在这张图片中看到的那样。存储库模式可以轻松切换数据库。

如果您永远不会切换数据库或在 dataAccess 层使用单元测试,那么实现存储库模式基本上是不值得的。 (工作量太大,与收益相比)

【讨论】:

  • 哇,甚至没有达到我的要求。我要求使用 .NET Core 类库使用 Entity Core 和 Azure 存储来执行多层应用程序的可靠解决方案。您甚至无法将框架正确安装到类库中,以便您可以访问所需的对象。我知道如何做多层企业级应用程序。我整天都在吃和呼吸“四人帮”类型的东西。对于有人询问多层应用程序如何在除 .net 核心之外的任何东西上运行的人来说,这将是一个很好的答案。
  • @DanielJerome 抱歉误解了您的问题,但您似乎想要一个多层应用程序? create separate Service Layer and Repository Layer assemblies。那么您是否无法在 dotnet core 中创建类库?或者你真正的问题是什么?
【解决方案2】:

我不确定您遇到了什么问题,但这里有一个很好的 ASP.NET Core Web 应用程序的多项目入门解决方案,按职责分为项目:

  • 核心(领域模型、抽象、服务)
  • 基础架构(特定于实现的类)
  • UI(asp.net core mvc web 项目)

https://github.com/ardalis/cleanarchitecture

这有帮助吗?

【讨论】:

  • 谢谢,当我回到带 VS 2017 的桌面时,我会立即调查这个问题。在发布活动期间,我花了两天时间听微软的谎言。他们不断重复运行 VS 2015 和 VS 2017 没有问题。他们需要在他们的 Channel 9 播放器应用程序上添加一个 BS 按钮。
猜你喜欢
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 2011-09-29
相关资源
最近更新 更多