c# - N 层 - 依赖注入 - Net Core
问题描述
我正在 ASP.NET Core 中构建解决方案架构。
我在 web 项目中引用存储库来声明依赖注入,ConfigureServices()
你可以吗?
我认为理想的情况是只引用服务项目,因为控制器应该只使用服务而不是存储库。
我有这些项目:
Web App (ASP.NET Core) - 引用所有项目。
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddTransient<IEventsService, EventsService>(); services.AddTransient<IEventsRepository, EventsSqlRepository>(); } public class EventsController : Controller { private readonly IEventsService _eventsService; public EventsController(IEventsService eventsService) { _eventsService = eventsService; } }
业务(类库 - .NET 标准)
Folder IServices IEventsService Folder Services public class EventsService : IEventsService { private readonly IEventsRepository _eventsRepository; public EventsService(IEventsRepository eventsRepository) { _eventsRepository = eventsRepository; } }
IRepository(类库 - .NET 标准)
- IEvents存储库
存储库(类库 - .NET 标准)
使用 EF 访问 BD
public class EventsSqlRepository : BaseRepository, IEventsRepository { }
实用程序(类库 - .NET 标准)
实体(类库 - .NET 标准)
- 从 BD EF 映射
非常感谢 !
解决方案
您的解决方案看起来不错。注册应用程序依赖项的部分称为组合根,它是应用程序中唯一应注册所有依赖项的地方。即使它物理上放置在应用程序的 Web 项目部分中,它在逻辑上也是应用程序的独立部分。你可以在这里阅读更多关于它的信息:http: //blog.ploeh.dk/2011/07/28/CompositionRoot/
推荐阅读
- angular5 - 选择默认值/对象选项
- node.js - Mongoose 验证和 GridsFS
- android - 自定义 SurfaceView 崩溃应用
- c# - 重构 linq 查询并在分组后返回单个
- c# - 从对象列表中过滤掉一些属性
- ios - Objective C https请求在恢复主线程之前不等待响应
- python - 如何从制表符分隔的文本中删除字符串外的字符
- android - 为 GridView 中的分隔符提供不同的颜色?
- pointers - 将 T* 的容器转换为 const T* 的容器实际上安全吗?
- django - EC2 上的 Django 应用程序高磁盘 IOPS