脚本宝典收集整理的这篇文章主要介绍了.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>
以上是脚本宝典为你收集整理的.netcore 自带依赖注入全部内容,希望文章能够帮你解决.netcore 自带依赖注入所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。