.netcore 6 ioc注入的三种方式

发布时间:2024年01月09日

1、定义接口

public interface MyInterceptorInterface

2、实现接口

public class MyInterceptorImpl : MyInterceptorInterface

在构造中增加以下代码,便于观察

static ConcurrentDictionary<string, string> keyValues = new ConcurrentDictionary<string, string>();

public MyInterceptorImpl() {
??? keyValues.TryAdd(Guid.NewGuid().ToString(), "12");
}

3、进行ioc注入

builder.Services.AddTransient<MyInterceptorInterface, MyInterceptorImpl>();

4、接收对应的注入对象

MyInterceptorInterface myInterceptorInterface;
MyAddScoped myAddScoped;

public ValuesController(MyInterceptorInterface myInterceptor, MyAddScoped myAddScoped)
{
??? myInterceptorInterface = myInterceptor;
??? this.myAddScoped = myAddScoped;
}

5、调用对应接口

public string TestMyInterceptorAspect([FromBody] test str)
{
??? //MyInterceptorInterface? myInterceptor = HttpContext.RequestServices.GetService<MyInterceptorImpl>();
??? this.myAddScoped.Test();
??? return this.myInterceptorInterface?.Test(str.str) ?? "error";
}

6、结论

1、注入有父类接收参数必须是父类,没有写父类只写子类可以用子类接收

三种方式
??? Scoped方式:
??????? 1、每一次web请求都会创建一个范围内存在的对象
??? builder.Services.AddScoped<MyInterceptorInterface, MyInterceptorImpl>();

??? AddSingletond方式:
??????? 1、对象只创建一次,单例模式
??? builder.Services.AddSingleton<MyInterceptorInterface, MyInterceptorImpl>();

??? AddTransient方式:
??????? 1、每次请求都创建、生命周期最短
??? builder.Services.AddTransient<MyInterceptorInterface, MyInterceptorImpl>();

文章来源:https://blog.csdn.net/qq_40934195/article/details/135478810
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。