BestPractice-最佳实践
首先需要通过nuget引入 Collapsenav.Net.Tool.AutoInject
这个包提供部分 属性注入 和 自动注册 的功能
但是在大多数场景下, 项目会使用 asp.net 提供的 controller 作为入口
如果你使用的是 Controller, 可以直接引入 Collapsenav.Net.Tool.AutoInject.Controller
简单的注册代码
以下是最简陋的情况下的注册代码
using Collapsenav.Net.Tool.AutoInject;
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseAutoInjectProviderFactory();
builder.Services.AddControllers().AddControllersAsServices();
/*
其他注册的服务
*/
builder.Services.AddAutoInjectController();
var app = builder.Build();
app.MapControllers();
app.Run();
使用 builder.Host.UseAutoInjectProviderFactory()
替换默认的工厂实现, 可以提供 属性注入 功能
尽量将这一步放在最上方先做
使用 builder.Services.AddControllers().AddControllersAsServices()
将controller交给依赖注入容器, 不然无法正常使用 属性注入
使用 builder.Services.AddAutoInjectController()
可以提供扫描程序集 自动注册 的功能
为了避免冲突, 尽量放在最后一个进行注册
使用属性注入
假设我们有这样一个服务 DefaultService
public class DefaultService
{
public async Task<string> GetString()
{
return await Task.FromResult("DefaultService");
}
}
然后我们还有一个简单的 DefaultController
[ApiController]
[Route("[controller]")]
public class DefaultController : ControllerBase
{
[AutoInject]
public DefaultService Service { get; set; }
[HttpGet]
public async Task<string> Get()
{
return await Service.GetString();
}
}
在完成了上方的注册之后, 就可以使用 先进的属性注入
首先需要定义一个 public
的属性(Property)或者字段(Field)
然后加上 [AutoInject]
注解即可
被 [AutoInject]
标记的服务可以不用注册
在使用 builder.Services.AddAutoInjectController()
时会通过扫程序集的方式找到所有被标记的type自动进行注册
默认会注册为 Scope
生命周期
如果对此有特别要求, 可以自行手动注册, 在已经手动注册的情况下不会再进行重复注册
Demo
我的GitHub上有提供对应的demo
通过现成的代码大概会有更加直观的了解