使用DotNet Core 2.0在多层应用程序中存储连接字符串的最佳实践?

时间:2019-05-28 10:12:08

标签: .net core

我有一个多层应用程序,其中有不同目的的不同项目。

所以让我们简化一下,说我有:
-DataAccessLayer
-BusinessLogicLayer
-WebAPI层

具有简单的层次结构:Web引用逻辑引用DAL

我的DAL希望知道一个连接字符串,当然,每个字符串之间的差异会有所不同(例如Dev / Test / Live Stage)。

1)在哪里存储连接字符串? 将它们存储在DAL项目中,因为它是自组织的,并且需要关心它自己的东西(“数据库层应该知道他的连接”) 还是应该将它们存储在Web项目中,因为它是我的应用程序的首要启动项目?

2)通过DotNet Core中的加密来加载不同的json-config(Web)或应用程序配置(lib DAL类)的最佳策略是什么?

1 个答案:

答案 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