.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 @   qingjiawen  阅读(862)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
历史上的今天:
2021-05-10 [HttpPost]和[AcceptVerbs(HttpVerbs.Post)]区别
点击右上角即可分享
微信分享提示