2017-09-01 6 views
2

Ich habe eine gemeinsame DI-Verwendung in meiner ASP.NET Core-Anwendung.Objekt von initialisiertem Objekt über DI in ASP.NET Core initialisieren

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddScoped(sp => new UserContext(new DbContextOptionsBuilder().UseNpgsql(configuration["User"]).Options)); 
    services.AddScoped(sp => new ConfigContext(new DbContextOptionsBuilder().UseNpgsql(configuration["Config"]).Options));   
} 

In ConfigContext existiert Verfahren GetUserString die connectionString zu UserContext zurückgibt. Und ich brauche AddScoped UserContext mit connectionString von ConfigContext bei der Anwendung auf UserContext.

+0

Kann die Verbindungszeichenfolge pro Anfrage variieren (anderer Benutzer)? –

+0

Ja, kann je nach Logik im configcontext abweichen –

Antwort

2

Sie können den Service bei einer Implementierungsfactory registrieren und einen anderen Service innerhalb der Factory mithilfe des als Argument bereitgestellten IServiceProvider auflösen.

Auf diese Weise verwenden Sie einen Dienst, um die Instanziierung eines anderen zu unterstützen.

public class UserContext 
{ 
    public UserContext(string config) 
    { 
     // config used here 
    } 
} 

public class ConfigContext 
{ 
    public string GetConfig() 
    { 
     return "config"; 
    } 
} 

public void ConfigureServices(IServiceCollection services) 
{ 
    // ... 

    services.AddScoped<ConfigContext>(); 

    services.AddScoped<UserContext>(sp => 
     new UserContext(sp.GetService<ConfigContext>().GetConfig())); 
} 
Verwandte Themen