web-dev-qa-db-fra.com

Injection de dépendance, injection avec paramètres

J'utilise l'implémentation vNext de DI. Comment passer des paramètres au constructeur? Par exemple, j'ai une classe:

public class RedisCacheProvider : ICacheProvider
{
    private readonly string _connectionString;

    public RedisCacheProvider(string connectionString)
    {
        _connectionString = connectionString;
    }
    //interface methods implementation...
}

Et registre de service:

services.AddSingleton<ICacheProvider, RedisCacheProvider>();

Comment passer un paramètre au constructeur de la classe RedisCacheProvider? Par exemple pour Autofac:

builder.RegisterType<RedisCacheProvider>()
       .As<ICacheProvider>()
       .WithParameter("connectionString", "myPrettyLocalhost:6379");
29
Oleksandr Nahirniak

Vous pouvez soit fournir un délégué pour instancier manuellement votre fournisseur de cache, soit fournir directement une instance:

services.AddSingleton<ICacheProvider>(provider => new RedisCacheProvider("myPrettyLocalhost:6379"));

services.AddSingleton<ICacheProvider>(new RedisCacheProvider("myPrettyLocalhost:6379"));

Veuillez noter que le conteneur ne supprimera pas explicitement les types instanciés manuellement, même s'ils implémentent IDisposable. Consultez le document ASP.NET Core sur Disposition des services pour plus d'informations.

67
Pinpoint