2016-01-17 7 views
13

Sto usando l'implementazione vNext di DI. Come passare i parametri al costruttore? Per esempio, ho classe: registroIniezione dipendenza ASP.NET 5, iniettare con parametri

public class RedisCacheProvider : ICacheProvider 
{ 
    private readonly string _connectionString; 

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

E il servizio:

services.AddSingleton<ICacheProvider, RedisCacheProvider>(); 

come passare parametri al costruttore della classe RedisCacheProvider? Ad esempio, per Autofac:

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

risposta

34

è possibile fornire un delegato per istanziare manualmente il vostro fornitore di cache o fornire direttamente un'istanza:

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

services.AddInstance<ICacheProvider>(new RedisCacheProvider("myPrettyLocalhost:6379")); 
+0

Come si farebbe che se il parametro al costruttore è una variabile di tipo DbContext. Ad esempio, 'StateService di classe pubblica: IStateService { private BloggingContext _context; public StateService (contesto BloggingContext) { _context = context; } public IEnumerable List() { return _context.States.ToList(); } } ' – nam

+0

@nam dai un'occhiata a questo. spiega come aggiungere un servizio con scope. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection – ArcadeRenegade