c# – 是否可以在Asp.net核心解决方案的单独Layer中管理DBContext的注入
作者:互联网
我们的asp.net核心解决方案分为以下几层:
Web UI项目(3种不同的Web应用程序)
BLL
实体(模型和视图模型)
DAL(DBContext,存储库)
所有Web UI都将利用BLL中的服务,然后BLL将引用DAL与数据进行交互.通常,在启动类中配置DBContext的服务.
有没有办法真正区分这个,以便web ui项目在使用DI时不需要引用DAL(DBContext)?我知道,为了发生依赖注入,DBContext需要在web ui启动时配置为作用域服务,但从逻辑上讲,UI对我来说没有任何意义,UI需要引用或与之有关DAL.
解决方法:
我建议使用这些图层:
> Web UI(具有验证属性的模型 – 数据格式,必需等)
>服务
>合同DLL(接口实体)
>实施(控制器动作)
>数据访问
在服务和Web UI之间共享合同DLL.在服务内部使用您喜欢的任何DAL / ORM.就个人而言,我更喜欢Dapper.
然后,使用Refit为您的JSON服务生成C#代理.通过网站的Startup类注入将代理转换到您的Web控制器.将大多数业务逻辑放在服务控制器中,并从网站控制器中调用它们.将网站控制器中的逻辑保持在最低限度.
通过这种设计,Web UI不了解数据访问层.如果您愿意,可以将其从Dapper切换到Entity Framework.重新安装JSON服务可以为您提供两端类型安全的C#代码(Web和服务)以及在需要时(例如,在Web浏览器中运行的AJAX代码中)编写原始HTTP帖子的灵活性.
您可以编写利用该服务的C#或PowerShell实用程序.换句话说,网站不一定是该服务的唯一消费者.
标签:c,asp-net,net-core,n-tier-architecture 来源: https://codeday.me/bug/20190710/1425765.html