首页 > 其他分享 >增量生成器(Incremental Generator)实现自动注入

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

时间:2024-08-15 10:41:52浏览次数:13  
标签:Generator 生成器 AddScope AutoInject class Test Incremental services public

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

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

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

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

源码地址

标签:Generator,生成器,AddScope,AutoInject,class,Test,Incremental,services,public
From: https://www.cnblogs.com/marvelTitile/p/18360380

相关文章

  • system generator学习记录
    SystemGenerator流程工具包:VIVADO2017.3Matlab2017a图1‑1systemgenerator版本要对应才能打开新建simulink打开systemgenerator,创建simulink文件图1‑2创建simulink文件添加systemgenerator图1‑3创建文件打开库模型图1‑4添加基础模型工具就......
  • CF1149C Tree Generator™
    题意\(n\)个点,\(m\)个询问。给你一棵树的括号序列,输出它的直径。有\(m\)次询问,每次询问表示交换两个括号,输出交换两个括号后的直径(保证每次操作后都为一棵树)输出共\(m+1\)行。\(3\len\le100\,000,1\leq\le100\,000\)——洛谷翻译。思路我们不难想到,一个......
  • TI 生成 TPG 流程 Test Pattern Generator
    TI生成TPGTestPatternGenerator1.主要作用:生成各种预定义的图形和模式用来检查CSI接口的图像传输质量调试和验证使用TPG生成的测试图形可以方便地验证接口的正确性和稳定性2.代码中的体现staticconstchar*constub960_tpg_qmenu[]={ "Disabled", "1vertical......
  • 朋友吐槽我为什么这么傻不在源生成器中用string.GetHashCode, 而要用一个不够优化的ha
    明明有更好的hash方法有位朋友对我吐槽前几天我列举的在源生成器的生成db映射实体的优化点提前生成部分hashcode进行比较所示代码publicstaticvoidGenerateReadTokens(thisIDataReaderreader,Span<int>s){for(inti=0;i<reader.FieldCount;i++){......
  • Python 中的生成器函数有什么作用及如何使用?
    生成器函数是一种特殊的函数,可以在迭代过程中动态生成值,而不是一次性返回所有值。它的作用有以下几点:节省内存:生成器函数一次只生成一个值,并在生成后立即释放内存,这样可以减小内存的占用,特别是在处理大数据集时非常有用。延迟计算:生成器函数可以按需生成值,只在需要的时......
  • 利用chatgpt3.5/4.0生成一个generator,完成杨辉三角
    deftriangles():row=[1]whileTrue:yieldrowrow=[sum(x)forxinzip([0]+row,row+[0])]#期待输出:#[1]#[1,1]#[1,2,1]#[1,3,3,1]#[1,4,6,4,1]#[1,5,10,10,5,1]#[1,6,15,20,15,6,1]#[1,7,......
  • 【AI绘画】FLUX:这款新的人工智能图像生成器非常善于创造人手
    FLUX.1是StableDiffusion的公开重量级继承者,可将文本转化为图像。FLUX.1dev生成图像:“Abeautifulqueenoftheuniverseholdingupherhands,faceinthebackground.”。就在7月下旬,人工智能初创公司黑森林实验室(BlackForestLabs)宣布成立公司,并发布了第一......
  • ] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin Ca
    [ERROR]Failedtoexecutegoalorg.mybatis.generator:mybatis-generator-maven-plugin:1.3.7:generate(default-cli)onprojectcom-zhianchen-pgsql:Executiondefault-cliofgoalorg.mybatis.generator:mybatis-generator-maven-plugin:1.3.7:generatefailed:Cann......
  • 如何利用Matlab网格生成器画太极
    注:首先要懂几何函数的定义!代码:1.主函数:clc,clear;closeall;g1=[1111;20-20;0-202;020-2;20-20;1221;0000;0000;0000;2222];%大○g2=[1111;010-1;10-10;-2-121;-1010;2211;1122;0000;-1-111;1111];%......
  • SourceGenerator 生成db to class代码优化结果记录 二
    优化在上一篇留下的DapperAOT还有什么特别优化点的问题在仔细阅读生成代码和源码之后,终于得到了答案个人之前一直以为DapperAOT只用了迭代器去实现,所以理应差不多实现代码却又极大差距,思维陷入了僵局,一度以为有什么黑魔法结果DapperAOT没有用迭代器去实现!!!靠北......