, , IConfigurationSource , ConfigurationProvider.
-, :
public class CustomMailConfigSource: IConfigurationSource
{
private readonly Action<DbContextOptionsBuilder> _dbOptions;
public CustomMailConfigSource(Action<DbContextOptionsBuilder> dbOptions)
{
_dbOptions = dbOptions;
}
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new CustomMailConfigProvider(_dbOptions);
}
}
:
public class CustomMailConfigProvider: ConfigurationProvider
{
public CustomMailConfigProvider(Action<DbContextOptionsBuilder> dbOptions)
{
DbOptions = dbOptions;
}
Action<DbContextOptionsBuilder> DbOptions { get; }
public override void Load()
{
var builder = new DbContextOptionsBuilder<ConfigurationContext>();
DbOptions(builder);
using (var dbContext = new ConfigurationContext(builder.Options))
{
dbContext.Database.EnsureCreated();
var authMessageSender = db.Context.AuthMessageSenders.FirstOrDefault();
Data = new Dictionary<string, string>
{
{ "PortNumber", authMessageSenderOption.PortNumber},
{ "SmtpServer", authMessageSenderOption.SmtpServer },
{ "UserName", authMessageSenderOption.UserName},
{ "Password", authMessageSenderOption.Password}
};
}
}
}
, .
IConfigurationBuilder:
public static class CustomProviderExtensions
{
public static IConfigurationBuilder AddCustomMailConfigProvider(
this IConfigurationBuilder builder, Action<DbContextOptionsBuilder> dbOptions)
{
return builder.Add(new CustomMailConfigSource(dbOptions));
}
}
Main() , :
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddCustomMailConfigProvider(dbOptions =>
dbOptions .UseSqlServer(connectionStringConfig.GetConnectionString(
"DefaultConnection"))
)
.Build();
:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?tabs=basicconfiguration
https://docs.microsoft.com/en-us/dotnet/api/Microsoft.Extensions.Configuration.ConfigurationProvider?view=aspnetcore-2.0