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