IOC小记-2
服务的创建
在创建对象时
有多个构造函数符合条件,会报错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) { }
}
1 | 生命周期<br>Singleton 根容器,服务实例保存在IserviceProvider对象上,IservicesProvider释放时,对应的实例才会被释放<br>Scoped,Transient 当<em>前IservicesProvider保存的服务实例,</em>IservicesProvider释放,这些服务实例才释放<em>释放会实现IDisposable 接口或IDisposableAsync<br>实例在</em>IservicesProvider 中用RealizedServices和Disposable Services中,两种生命周期(Singleton,Scoped)独有对应的RealizedServices 用有储存实例,创建前先检查释放有,有则直接返回,没有则创建,Transient会直接创建新对象创建后如果时间IDisposable接口,则添加到IDisposable 那个列表中等待释放,<em id= "__mceDel" ><br><br><br><br><br></em><br><br><br><br><br><br><br><br><br><br><br><br> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)