我在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 UserContextconnectionString中的ConfigContext
应用于UserContext时。

最佳答案

您可以在实现工厂中注册服务,并使用提供的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()));
}

09-10 07:09