【发布时间】:2020-09-16 16:40:43
【问题描述】:
我已经实现了我的自定义 IConfigurationProvider 和 IConfigurationSource。
public class MyConfigurationSource : IConfigurationSource
{
public string Foo { get; set; }
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new MyConfigurationProvider(this);
}
}
internal class MyConfigurationProvider : ConfigurationProvider
{
public MyConfigurationSource Source { get; };
public MyConfigurationProvider()
{
Source = source
}
public override void Load()
{
// I'd like to assign here my configuration data by using some dependencies
Data = ....
}
}
我在 Startup 构造函数中构建我的配置(我覆盖了 CreateDefaultBuilder 创建的配置):
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables()
.AddMyConfiguration("myfoovalue")
.Build();
扩展方法:
public static IConfigurationBuilder AddMyConfiguration(this IConfigurationBuilder builder, string foo)
{
return builder.Add(new MyConfigurationSource
{
Foo = url
});
}
我希望我能以某种方式注入要在Load 方法中使用的服务。这里的问题是配置build是在Startup构造函数中完成的。我只能注入在此构造函数中可用的依赖项:IWebHostEnvironment、IHostEnvironment、IConfiguration 以及我在构建 WebHost 时添加的所有依赖项。当我调用AddMyConfiguration 扩展方法时,也必须传递这些依赖项。我怎么能使用当时甚至不存在的依赖项?
【问题讨论】:
标签: c# .net-core dependency-injection configuration