在之前呢,为了偷懒,是使用了反射在项目启动的时候,自动注入项目需要的服务
现在改为使用源生成器,自动生成服务注入的代码
dotnet add package AutoInjectGenerator --version 0.0.3
一个提供了3个Attribute用于自动注入的配置
AutoInjectAttribute
AutoInjectContextAttribute
AutoInjectConfiguration
AutoInjectAttribute
用于标注需要注册的服务实现
可选参数
LifeTime
注入的服务的生命周期,默认ScopeServiceType
注入的服务的抽象类型services.AddScope<TService, TImpl>
中的TServiceGroup
一般情况可忽略
// services.AddScope<Test, Test>()
[AutoInject]
public class Test {}
// services.AddScope<ITest, Test>()
[AutoInject]
public class Test : ITest {}
// services.AddScope<Test, Test>()
[AutoInject(ServiceType = typeof(Test))]
public class Test : ITest {}
// services.AddScope<Test, Test>()
// services.AddScope<ITest, Test>()
[AutoInject(ServiceType = typeof(Test))]
[AutoInject(ServiceType = typeof(ITest))]
public class Test : ITest {}
AutoInjectContextAttribute
用于标注需要生成注入方法的地方
[AutoInjectContext]
public static class AutoInjectContext
{
public static partial void AutoInject(this IServiceCollection services);
}
生成的代码
/// <inheritdoc/>
static partial class AutoInjectContext
{
public static partial void AutoInject(this Microsoft.Extensions.DependencyInjection.IServiceCollection services)
{
services.AddScoped<Test>();
services.AddScope<ITest, Test>()
}
}