我正在查阅有关实现自定义配置提供程序的[Microsoft文档][1],并尝试创建一个Entity Framework配置提供程序,但我很难理解重新加载配置。
我在网上看到的示例是基于记录更改来重新加载配置,但我只想在某个间隔时间进行简单的重新加载。这可能吗?
这是我的配置源:
public class EFConfigurationSource : IConfigurationSource
{
private readonly Action<DbContextOptionsBuilder> _optionsAction;
public EFConfigurationSource(Action<DbContextOptionsBuilder> optionsAction)
{
_optionsAction = optionsAction;
}
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new EFConfigurationProvider(_optionsAction);
}
}
配置提供程序:
public class EFConfigurationProvider : ConfigurationProvider
{
public EFConfigurationProvider(Action<DbContextOptionsBuilder> optionsAction)
{
OptionsAction = optionsAction;
}
Action<DbContextOptionsBuilder> OptionsAction { get; }
public override void Load()
{
var builder = new DbContextOptionsBuilder<MyDBContext>();
OptionsAction(builder);
using (var dbContext = new MyDBContext(builder.Options))
{
Data = dbContext.SomeConfigurationTable.ToDictionary(x => x.ConfigCd, x => x.ConfigValue);
}
}
}
我使用扩展方法将其添加到我的应用程序配置中:
public static class EntityFrameworkExtensions
{
public static IConfigurationBuilder AddEFConfiguration(this IConfigurationBuilder builder, Action<DbContextOptionsBuilder> optionsAction)
{
return builder.Add(new EFConfigurationSource(optionsAction));
}
}
注册它:
public static IHostBuilder CreateHostBuilder(string[] args)
{
...
.ConfigureAppConfiguration((hostingContext, config) =>
{
// Create a temporary IConfiguration to read in values needed on building the host.
IConfiguration appConfig = new ConfigurationBuilder().AddJsonFile("appsettings.json", false, false).Build();
config.AddEFConfiguration(options => options.UseSqlServer(appConfig.GetConnectionString("RTPConnection")));
});
...
}
如何实现在更改时重新加载?
重新加载更改未被实现,因此在应用程序启动后更新数据库将不会影响应用程序的配置。 [1]: https://learn.microsoft.com/en-us/dotnet/core/extensions/custom-configuration-provider