【发布时间】:2019-05-22 22:06:25
【问题描述】:
我有一个带有控制器、服务和存储库的典型应用程序。所以,有2个项目:
- 带有控制器的 ASP.NET Core WebAPI
- 包含所有业务逻辑的核心
WebAPI 应该只知道来自 Core 的服务。在核心中,我有返回 DTO 的公共类(服务),但这些服务取决于我想标记为 internal 的 DbContext。当然不能
错误 CS0051 可访问性不一致:参数类型 'DevicesDbContext' 比方法更难访问 'DeviceService.DeviceService(DevicesDbContext, IMapper)'
我正在使用 EF Core 和 instead of own Repositories I use DbContext。我有只能在核心项目中使用的实体模型。您能否建议我如何实现这一目标?
例如我的模型是:
internal class Device
{
public int Id {get;set;}
}
数据库上下文:
internal class DevicesDbContext : DbContext
{
public DbSet<Device> Devices {get;set;}
}
服务:
public class DeviceService : IDeviceService
{
public DeviceService(DevicesDbContext dbContext, IMapper mapper)
{
}
..
}
我在 DeviceService 的构造函数中遇到了这个错误。这不是duplicate,因为我知道该错误的含义以及如何解决该错误。在这里我询问了这种方法的设计或架构,因为我需要避免在 WebAPI 中直接使用模型和 dbcontext
【问题讨论】:
-
请问您为什么要将 DevicesDbContext 设为内部?在我看来,Device 和 DeviceDbContext 都应该是公开的。其次,您可以将您的 DTO 模型放在一个新的核心项目中。这可能会让你的责任更加明显。也许尝试将 DbContext 设置为受保护而不是内部?
-
@ZakkDiaz 我想将其设为内部以避免直接在 WebAPI 中使用它
-
“设计或架构”对于 SO 来说有点宽泛。您可能(例如,您应该先阅读他们的帮助中心)可以在Software Engineering 上提出这个问题,但我认为,就像这里一样,他们更喜欢更具体地了解您的身份寻找。
-
@Greg 我在核心项目的 DI 中注册了它。我没有说我想在不注册的情况下注入上下文
标签: c# entity-framework oop asp.net-core