Sei que esta pergunta foi respondida no Stack Overflow, mas estou procurando uma explicação "explique como se eu fosse um Golden Retriever" , já que grande parte da terminologia (e alguns dos conceitos) não são familiares para mim.
Em MauiProgram.cs
, é necessário colocar linhas de código parecidas com estas:
builder.Services.AddTransient<SecondPageViewModel>();
builder.Services.AddSingleton<IAlertService, AlertService>();
Não tenho ideia de quando usar AddTransient
ou AddSingleton
.
Eu entendo o padrão de design Singleton e meio que entendo a injeção de dependência, mas não entendo como essas linhas de código lidam com a injeção de dependência e, francamente, não entendo a documentação.
Minha suspeita é que quando você sai de uma página e ela está Transient
, o estado da página/possivelmente alguns dados associados a ela são excluídos, então quando você navega de volta para ela, é como se fosse a primeira vez que ela foi mostrada.
Mas posso estar errado.
Aqui estão as definições de tempo de vida:
Singleton significa que um objeto dura enquanto o aplicativo durar.
Transitório significa que um novo objeto é solicitado sempre que você solicita um serviço transitório.
Com escopo definido significa uma vida útil limitada, cujo tempo depende do tipo de aplicação. Para um serviço da web, geralmente é desde o recebimento de uma solicitação HTTP até o envio de uma resposta HTTP. Em um aplicativo MAUI, não sei. Talvez para uma página como você disse?
Limpar
Há também outra coisa que o contêiner IoC cuida. E isso está liberando recursos. Isso é feito com a
IDisposable
interface. Todos os serviços Singleton e com escopo serão limpos.Para transientes, é mais difícil, pois o contêiner IoC funciona apenas como uma fábrica para eles (ou seja, criando um novo toda vez, sem saber por quanto tempo serão usados).