增量生成器(Incremental Generator)实现自动注入

在之前呢,为了偷懒,是使用了反射在项目启动的时候,自动注入项目需要的服务

现在改为使用源生成器,自动生成服务注入的代码

nuget地址

dotnet add package AutoInjectGenerator --version 0.0.3

一个提供了3个Attribute用于自动注入的配置

  • AutoInjectAttribute
  • AutoInjectContextAttribute
  • AutoInjectConfiguration

AutoInjectAttribute

用于标注需要注册的服务实现

可选参数

  • LifeTime注入的服务的生命周期,默认Scope
  • ServiceType注入的服务的抽象类型services.AddScope<TService, TImpl>中的TService
  • Group一般情况可忽略

// 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>()
    }
}

目前存在的问题,无法检测到其他生成器生成的类型

源码地址

posted @ 2024-08-15 10:24  yaoqinglin_mtiter  阅读(34)  评论(0编辑  收藏  举报