在ASP.NET Core中通过DI初始化Initialized对象中的对象

时间:2017-09-01 15:26:02

标签: c# dependency-injection asp.net-core asp.net-core-mvc

我在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中,connectionString返回UserContext。 我需要AddScoped UserContext connectionString来自ConfigContext 申请UserContext时。

1 个答案:

答案 0 :(得分: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()));
}