Differences entre les services AddTransient, AddScoped et AddSingleton
Source : Stack Overflow
En resume
Les objets Transient sont toujours differents ; une nouvelle instance est fournie a chaque controleur et a chaque service.
Les objets Scoped sont les memes au sein d’une requete, mais differents d’une requete a l’autre.
Les objets Singleton sont les memes pour chaque objet et chaque requete.
Pour plus de clarte, cet exemple de la documentation .NET montre la difference :
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, OperationId. 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 :
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
{
}
}
Nous implementons ces interfaces en utilisant une seule classe, Operation, qui accepte un GUID dans son constructeur, ou utilise un nouveau GUID si aucun n’est fourni :
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;
}
}
Ensuite, dans ConfigureServices, chaque type est ajoute au conteneur
(Reponse tronquee)