. net框架和.net核心的通用配置策略



这更像是一个与体系结构相关的问题。我正在努力扩展。net框架应用程序,以添加。net核心支持。现在我的应用程序使用System.Configuration.ConfigurationManager类读取所有配置,该类很重要,因为在引导DI时使用了与读取动态模块相关的一些配置。现在我看到。net core不依赖于这个ConfigurationManager类,并且有自己的JSON格式的appsettings配置文件。这将要求我改变策略,使其具有支持框架和核心的公共逻辑。

我正在寻求关于社区如何解决这个问题以及什么是最好的前进方式的任何建议。

App.config

<appSettings>
<add key="EndPointAssembliesPath" value="<some directory path>" />
<add key="ModulesPath" value="<some directory path>" />
<add key="BusinessAssembliesScanningPattern" value="*.BusinessModule.*.dll" />
</appSettings>
<connectionStrings>
<add name="CompanyDatabase" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=DataSource;Integrated Security=SSPI;" />
</connectionStrings>

appsettings.json

"EndPointAssembliesPath": "<some path>",
"BusinessModulesPath": "<some directory path>",
"BusinessAssembliesScanningPattern": "*.BusinessModule.*.dll",
"ConnectionStrings": {
"CompanyDatabase": "Data Source=.;Initial Catalog=DataSource;Integrated Security=SSPI;"
}

请看一下。net中的配置提供程序。所有的示例都打算与。net Core一起使用,但大多数NuGet包都与。net Standard 2.0兼容。因此,你应该能够从任何兼容。net标准2.0的。net框架应用程序中使用它们。

您的代码可能看起来像这样:

var configurationBuilder = new ConfigurationBuilder();
configurationBuilder.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddXmlFile("App.config", optional: true, reloadOnChange: true);
var config = configurationBuilder.Build();

从此可以使用统一的config对象。

免责声明:我没有测试过,但我很有信心😄

检查应用程序是否正在使用web。配置文件或json文件。连接字符串的示例:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{ 
if (ConfigurationManager.ConnectionStrings["DefaultConnection"] != null)
{
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
}
else
{
var connString = AppConfigSettings.Current.AppConnection;
optionsBuilder.UseSqlServer(connString);
}
}

最新更新