ASP.NET Core 分层服务注入思想实现
- 背景概要
- 分层服务注入是什么?
- 代码实现
- 如何使用
背景概要
熟悉 ASP.NET Core 的同学都知道在开发ASP.NET Core 项目时都会使用到依赖注入(DI),这是就需要在启动项目的 Program
或 Startup
类中 builder 要用到的服务,但这里有个问题,就是分层架构,这个时候不服务同层的编码可能是不同的人,就会造成 Program
或 Startup
类同时有多人编辑,甚至是造成服务注入需要专人来完成,为团队协作带来麻烦。如何规避呢,就是今天要说的 “分层服务注入”。
分层服务注入是什么?
顾名思义,原始的注入方式需要在同一层的同一个文件(项目启动文件)中注入需要的服务,分层就是在各个项目层自己进行服务注入。
代码实现
Demo结构
TieredServiceRegistration
项目就是分层服务注入实现层了,作为分层注入基础层,需要进行依赖注入的层都需要引用它。由于代码量比较大就不展示实现了。
可以前往Gitee下载免费的哦
TieredServiceRegistration:https://gitee.com/gun_s/tiered-service-registration
如何使用
- 服务层实现 ModuleInit 类 将该层服务注入
internal class ModuleInit : IModuleInitializer
{
public void Initialize(IServiceCollection services)
{
services.AddScoped<ClassOne>();
}
}
- Program 类中新增
builder.Services.RunModuleInitializers(ReflectionScheduler.GetAllReferencedAssemblies());
- Controller 实现
using Microsoft.AspNetCore.Mvc;
using ServiceOne;
using ServiceTwo;
namespace TieredServiceRegistrationWebApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class StringController : ControllerBase
{
private readonly ClassOne _classOne;
private readonly ClassTwo _classTwo;
public StringController(ClassOne classOne, ClassTwo classTwo)
{
_classOne = classOne;
_classTwo = classTwo;
}
[HttpGet(Name = "String")]
public string GetString()
{
return $"{_classOne.StrOne()}-{_classTwo.StrTwo()}";
}
}
}
- 效果