服务的创建
在创建对象时
有多个构造函数符合条件,会报错System.InvalidOperationException:“Unable to activate type 'App.Qux'. The following constructors are ambiguous:
要有唯一的才行
new ServiceCollection()
.AddTransient<IFoo, Foo>()
.AddTransient<IBar, Bar>()
.AddTransient<IBaz, Baz>()
.AddTransient<IQux, Qux>()
.BuildServiceProvider()
.GetServices<IQux>();
public class Qux : IQux
{
/// <summary>
/// 后续添加的
/// </summary>
/// <param name="foo"></param>
/// <param name="bar"></param>
/// <param name="baz"></param>
public Qux(IFoo foo, IBar bar, IBaz baz) { Console.WriteLine("这是最合适的,后续添加,去除这里为原来程序"); }
public Qux(IFoo foo, IBar bar) { }
public Qux(IBar bar, IBaz baz) { }
}
生命周期
Singleton 根容器,服务实例保存在IserviceProvider对象上,IservicesProvider释放时,对应的实例才会被释放
Scoped,Transient 当前IservicesProvider保存的服务实例,IservicesProvider释放,这些服务实例才释放
释放会实现IDisposable 接口或IDisposableAsync
实例在IservicesProvider 中用RealizedServices和Disposable Services中,两种生命周期(Singleton,Scoped)独有对应的
RealizedServices 用有储存实例,创建前先检查释放有,有则直接返回,没有则创建,Transient会直接创建新对象
创建后如果时间IDisposable接口,则添加到IDisposable 那个列表中等待释放,
标签:释放,IservicesProvider,Qux,实例,AddTransient,IOC,public,小记 From: https://www.cnblogs.com/liujian1368928/p/17125030.html