• 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,也许这个问题就不再是问题! 

  • 相关阅读:
    前后端分离毕设项目之springboot同城上门喂遛宠物系统(内含文档+源码+教程)
    C# 图解教程 第5版 —— 第12章 枚举
    图像生成2
    CMMI认证要求
    Unity 向量
    C++之红黑树
    map转换成JSON的方法
    设计模式之观察者模式
    CFAR检测MATLAB仿真
    C# WPF入门学习主线篇(二十一)—— 静态资源和动态资源
  • 原文地址:https://blog.csdn.net/softshow1026/article/details/134380802