关于.Net Core原生IOC生命周期嵌套报错
最近有群友发现一个神奇的现象 当使用生命周期嵌套会出现报错问题,究竟是什么情景会出现该问题呢!
创建两个实现类IocService1 ->接口IIocService1 ,IocService2 ->接口IIocService2
然后在IocService2 中注入IocService1 代码如下:
namespace WebApplication1.Services { public class IocService2 : IIocService2 { public IIocService1 _iocService1; public IocService2(IIocService1 iocService1) { _iocService1 = iocService1; } } public interface IIocService2 { } }
注册生命周期如下,会出现报错。
builder.Services.AddScoped<IIocService1, IocService1>();
builder.Services.AddSingleton<IIocService2, IocService2>();
大致原因是因为Singleton与Scoped创建的服务容器不一致导致的,在项目中也因该减少使用Scoped,很容易出现该错误!
该图可以大致说明报错原因:

当服务为Scope时不能从跟容器获取,因该从子容器获取
// 根容器 _serviceProvider = serviceProvider; // 子容器 var pro = _serviceProvider.CreateScope().ServiceProvider; // Scope的服务必须从子容器获取,不能从根容器获取 var service1 = _serviceProvider.CreateScope().ServiceProvider.GetService<ITest1Service>(); service1?.Say().Wait();
此文章仅是对自己学习进行记录,非专业解答,大神勿喷!
三更灯火五更鸡,正是男儿读书时!

浙公网安备 33010602011771号