我有一个多层应用程序,其中有不同目的的不同项目。
所以让我们简化一下,说我有:
-DataAccessLayer
-BusinessLogicLayer
-WebAPI层
具有简单的层次结构:Web引用逻辑引用DAL
我的DAL希望知道一个连接字符串,当然,每个字符串之间的差异会有所不同(例如Dev / Test / Live Stage)。
1)在哪里存储连接字符串? 将它们存储在DAL项目中,因为它是自组织的,并且需要关心它自己的东西(“数据库层应该知道他的连接”) 还是应该将它们存储在Web项目中,因为它是我的应用程序的首要启动项目?
2)通过DotNet Core中的加密来加载不同的json-config(Web)或应用程序配置(lib DAL类)的最佳策略是什么?
答案 0 :(得分:-1)
您的appsettings文件appsettings.dev.json可能如下所示
{
"SampleObj": {
"AnyPropName" : "testProp"
} ,
"ConnectionStrings": {
"Test": "CONNECTION-STRING"
}
}
某些班级
public class LocalAppSettings
{
public string ConnectionString { get; set; }
public string AnyPropName { get; set; }
}
startup.cs
public IConfigurationRoot Configuration { get; set; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
//EnvironmentName = env.EnvironmentName;
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
var settings = new LocalAppSettings
{
ConnectionString = Configuration.GetConnectionString("Test"),
AnyPropName = Configuration.GetSection("SampleObj:AnyPropName").Value,
};
services.AddSingleton<LocalAppSettings>(settings)
}
现在是DI,请在其他项目的类构造函数中使用它
launchSettings.json看起来像
"profiles": {
"IIS Express": {
"commandName": "Executable",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Local": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:4999"
},
"Development": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "dev"
},
"applicationUrl": "http://localhost:4999"
}
}
如果您打算发布为Azure,请不要忘记在应用程序服务的设置中设置ASPNETCORE_ENVIRONMENT