<p><strong>En resume</strong></p>
<p>Les objets Transient sont toujours differents ; une nouvelle instance est fournie a chaque controleur et a chaque service.</p>
<p>Les objets Scoped sont les memes au sein d’une requete, mais differents d’une requete a l’autre.</p>
<p>Les objets Singleton sont les memes pour chaque objet et chaque requete.</p>
<p>Pour plus de clarte, cet exemple de la <a href="https://learn.microsoft.com/dotnet/core/extensions/dependency-injection-usage">documentation .NET</a> montre la difference :</p>
<p>Pour illustrer la difference entre ces options de duree de vie et d’enregistrement, considerez une interface simple qui represente une ou plusieurs taches comme une operation avec un identifiant unique, <code>OperationId</code>. Selon la facon dont nous configurons la duree de vie de ce service, le conteneur fournira soit la meme instance, soit des instances differentes du service a la classe demandeuse. Pour clarifier quelle duree de vie est demandee, nous allons creer un type par option de duree de vie :</p>
<pre><code class="lang-auto">using System;
namespace DependencyInjectionSample.Interfaces
{
public interface IOperation
{
Guid OperationId { get; }
}
public interface IOperationTransient : IOperation
{
}
public interface IOperationScoped : IOperation
{
}
public interface IOperationSingleton : IOperation
{
}
public interface IOperationSingletonInstance : IOperation
{
}
}
</code></pre>
<p>Nous implementons ces interfaces en utilisant une seule classe, <code>Operation</code>, qui accepte un GUID dans son constructeur, ou utilise un nouveau GUID si aucun n’est fourni :</p>
<pre><code class="lang-auto">using System;
using DependencyInjectionSample.Interfaces;
namespace DependencyInjectionSample.Classes
{
public class Operation : IOperationTransient, IOperationScoped, IOperationSingleton, IOperationSingletonInstance
{
Guid _guid;
public Operation() : this(Guid.NewGuid())
{
}
public Operation(Guid guid)
{
_guid = guid;
}
public Guid OperationId => _guid;
}
}
</code></pre>
<p>Ensuite, dans <code>ConfigureServices</code>, chaque type est ajoute au conteneur</p>
<p><em>(Reponse tronquee)</em></p>