2017-09-01 220 views
2

在我的ASP.NET Core應用程序中有常見的DI用法。在ASP.NET Core中使用DI初始化初始化對象的對象

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));   
} 

ConfigContext存在方法GetUserString它返回到connectionStringUserContext。 而我需要AddScoped UserContextconnectionStringConfigContext 當適用於UserContext時。

+0

連接字符串可以根據每個請求(不同的用戶)而變化嗎? –

+0

是的,可以根據configcontext中的邏輯而有所不同 –

回答

2

您可以使用實現工廠註冊服務,並使用提供的IServiceProvider作爲參數來解析工廠內的其他服務。

以這種方式,您正在使用一種服務來幫助實例化另一種服務。

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())); 
}