我在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
时。
答案 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()));
}