.netcore 自带依赖注入

 

.net core主要提供了三种依赖注入的方式

AddTransient瞬时模式:每次请求,都获取一个新的实例。即使同一个请求获取多次也会是不同的实例

AddScoped:每次请求,都获取一个新的实例。同一个请求获取多次会得到相同的实例

AddSingleton单例模式:每次都获取同一个实例

 

权重:

AddSingleton→AddTransient→AddScoped

AddSingleton的生命周期:

项目启动-项目关闭 相当于静态类 只会有一个

AddScoped的生命周期:

请求开始-请求结束 在这次请求中获取的对象都是同一个

AddTransient的生命周期:

请求获取-(GC回收-主动释放) 每一次获取的对象都不是同一个
 

 

问题:如果我们需要注入的对象很多怎么办?(通过反射来解决)

新建扩展方法CoreExtensions,然后在Startup中ConfigureServices方法中加上 services.AddRepository();。

 

 

 

 

注入接口

1 services.AddScoped(typeof(IUserService), typeof(UserService));
2 services.AddScoped<IUserService, UserService>();

无接口,自己注入自己

 services.AddScoped<UserService>(); services.AddScoped(typeof(UserService)); 

注入,构造函数传参

1 services.AddScoped<IUserService, UserSerivce>(x => {return new UserSerivce("");});
2 services.AddScoped<IUserService>(x => {return new UserSerivce("");});
3 services.AddScoped(typeof(IUserService), x => {return new UserSerivce("");});

注入,构造函数传参,需要依赖另一服务

1 services.Add<IUserService, UserService>(x => {return new UserService(x.GetServce<SomeService>());});

动态注入多个接口实现

1 var assembly = Assembly.GetExecutingAssembly().DefinedTypes.Where(a => a.Name.EndsWith("Service") && !a.Name.StartWith("I"));
2 foreach(var assm in assembly)
3 {
4     services.AddTransient(assm.GetInterfaces.FirstOrDefault(), assm);
5 }

调用的时候:IEnumerable<IUserService>

posted @ 2022-05-10 15:15  qingjiawen  阅读(812)  评论(0编辑  收藏  举报