2016-01-17 9 views
13

Używam vNext realizacji DI. Jak przekazać parametry do konstruktora? Na przykład, mam klasy: rejestrWstrzyknięcie zależności ASP.NET 5, wstrzyknąć parametry

public class RedisCacheProvider : ICacheProvider 
{ 
    private readonly string _connectionString; 

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

serwis:

services.AddSingleton<ICacheProvider, RedisCacheProvider>(); 

Jak przekazać parametr do konstruktora klasy RedisCacheProvider? Na przykład dla Autofac:

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

Odpowiedz

34

Można też zapewnić delegata ręcznie instancję z operatorem cache lub bezpośrednio dostarczyć instancję:

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

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

Jak byś zrobił, że jeśli parametr do konstruktora jest zmienną typu DbContext. Na przykład: public class StateService: IStateService { private BloggingContext _context; public StateService (kontekst BloggingContext) { _context = kontekst; } public IEnumerable List() { return _context.States.ToList(); } } ' – nam

+0

@nam spójrz na to. wyjaśnia, jak dodać usługę o określonym zakresie. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection – ArcadeRenegade