• Asp.Net Core WebAPI 使用依赖注入DI


    1. namespace WebAPI_DI
    2. {
    3. public class Program
    4. {
    5. public static void Main(string[] args)
    6. {
    7. var builder = WebApplication.CreateBuilder(args);
    8. // Add services to the container.
    9. builder.Services.AddControllers();
    10. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
    11. builder.Services.AddEndpointsApiExplorer();
    12. builder.Services.AddSwaggerGen();
    13. var app = builder.Build();
    14. // Configure the HTTP request pipeline.
    15. if (app.Environment.IsDevelopment())
    16. {
    17. app.UseSwagger();
    18. app.UseSwaggerUI();
    19. }
    20. app.UseHttpsRedirection();
    21. app.UseAuthorization();
    22. app.MapControllers();
    23. app.Run();
    24. }
    25. }
    26. }

    builder.Services 则是帮我已经创建好的IServiceCollection 对象。

    我们再新建一个测试类 DITestClass:

    public class DITestClass { public int Add(int i, int n) { return i + n; } }

    然后我们在builder.Services中进行注册

    最后我们在默认的WeatherForecastController控制器里面加一个post方法,并用构造函数注入的方式将DITestClass注入进去。

    二、[FromService] 注入

    FromServicesAttribute 允许将服务直接注入到操作方法,而无需使用构造函数注入。
    改属性的作用主要针对我们在依赖注入初始化对象(该对象初始化很耗时),这个时候不管请求的api方法有没有用到该对象都会等待很长时间。
    所以使用FromService让接口在请求的时候再注入,从而不影响其他接口

    三、多层架构注入

    在多层架构中我们如果引用了其他项目,要使用其他项目中的类,那么要在主项目中进行DI注入,这样相当于所有其他模块或者其他人写的项目都需要主项目来维护注入,比如:

    新建一个ClassLibrary1项目,Class1类,方法Sub:

    那么有没有方法让他们自己的项目自己管理注册呢,我们可以简单改造一下

    • 新建一个类库,定义一个公共接口,安装Microsoft.Extensions.DependencyInjection 包
    • 在ClassLibarary1里面定义实现接口类
    • 在Programe.cs里面调用引用项目的注册类

    这样其他项目也按照这种方式,在主项目中只要调用一次注册管理。不过这是最简单的方式,你也可以使用反射来查找引用的项目继承了IModuleInit的类,然后进行Init方法调用,这样会更优雅一些。
    当然你还可以使用其他依赖注入框架来取代Microsoft.Extensions.DependencyInjection,也许这个问题就不再是问题! 

  • 相关阅读:
    这几道SQL面试题秒杀大部分的0年工作经验的毕业生
    冲量在线“隐私计算信创一体机”亮相2022世界人工智能大会,获高度关注
    Pthon中的文件处理
    c++智能指针
    简单聊聊 Kafka
    Raft共识算法浅谈
    智能语法编辑器市场现状及未来发展趋势分析
    绿色区块链——绿色数字产业新征程
    Python SSL操作手册
    Web3 用例全解析:传统品牌加速进入 Web3 的原因?
  • 原文地址:https://blog.csdn.net/softshow1026/article/details/134380802