我意识到这个问题在 Stack Overflow 上得到了解答,但我正在寻找“像我是金毛猎犬一样解释它”的解释,因为很多术语(和一些概念)对我来说都不熟悉。
在 中MauiProgram.cs
,需要输入如下所示的代码行:
builder.Services.AddTransient<SecondPageViewModel>();
builder.Services.AddSingleton<IAlertService, AlertService>();
我不知道什么时候使用AddTransient
or AddSingleton
。
我理解单例设计模式,也有点理解依赖注入,但我不明白这些代码行如何处理依赖注入,而且坦率地说,我不理解文档。
我的怀疑是,当您离开某个页面时Transient
,该页面的状态/可能会删除与其关联的一些数据,因此当您导航回该页面时,就像第一次显示它一样。
但我可能是错的。
以下是生命周期的定义:
Singleton意味着对象的生命周期与应用程序的生命周期相同。
瞬态意味着每次请求瞬态服务时都会请求一个新对象。
作用域意味着有限的生命周期,多长时间取决于应用程序的类型。对于 Web 服务,通常是从接收 HTTP 请求到发送 HTTP 响应。在 MAUI 应用程序中,我不知道。也许像你说的那样的页面?
清理
IoC 容器还负责处理其他事情。并且正在释放资源。通过界面就完成了
IDisposable
。所有 Singleton 和 Scoped 服务都将被清理。对于瞬态来说,这更困难,因为 IoC 容器就像它们的工厂一样(即每次创建一个新容器而不知道它们将使用多长时间)。