在ASP.NET Core中的项目之间共享配置文件

时间:2018-10-19 08:48:30

标签: asp.net-core asp.net-core-2.0 microservices asp.net-core-webapi asp.net-core-2.1

我在asp.net core中有一个解决方案,并且内部存在多个API项目,这是一种微服务架构。我的解决方案结构如下所示。

ABC.API
DEF.API
GHI.API and so on....

我还有一个类库项目,该项目具有一些通用功能,并且可以被上述所有API项目使用。

我想使用json文件或config文件将连接字符串保留在类库项目中,因为以上所有内容都连接到同一数据库,并且我不想在其中重复所有项目。

问题:

  • 如何将文件(json / config)保留在库项目中。如果放置,则在发布项目后将如何存储值,因为它将生成一个.dll文件。
  • 如何访问API项目中的连接字符串,原因是我正在初始化API项目中的连接。
  • 我尝试将文件保留在较高的文件夹中,然后在Program.cs中添加了以下设置。

    var sharedFolder = Path.Combine(env.ContentRootPath, "..\\..", "Shared");
    config..AddJsonFile(Path.Combine(sharedFolder, "SharedSettings.json"), optional: false)
    

    但这不起作用,因为在单独发布项目之后,将找不到该文件夹​​。

任何人都可以指导我如何实现这一目标,我是否走上了正轨?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题

我解决的方法是执行以下操作。

  1. 为所有共享依赖项创建类库

  2. 在此类库中创建名为AppSettings的文件夹。在其中存储所有json配置

  3. 然后我在该类库中创建了一个名为JsonConfiguration.cs的静态帮助程序类,请参见代码

     public static class JsonConfiguration
    {
    
    public static IConfiguration ConfigurationContainer { get; private set; }
    
    public static IConfiguration CreateConfigurationContainer()
    {
        var environment = string.Empty;
        try
        {
            environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
            _logger.Debug($"Found environment variable : {environment}");
            if (string.IsNullOrWhiteSpace(environment))
            {
                _logger.Debug($"Setting up Production appsettings.");
                //WE ARE IN PROD !!
                return ConfigurationContainer = new ConfigurationBuilder()
                    .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                    .AddJsonFile($"bin/AppSettings/appsettings.json").Build();
            }
    
            _logger.Debug($"Setting up {environment} appsettings.");
            return ConfigurationContainer = new ConfigurationBuilder()
                .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                .AddJsonFile($"bin/AppSettings/appsettings-{environment}.json").Build();
        }
        catch (Exception ex)
        {
            _logger.Fatal(ex, "{message} {environment}", "Failed Setting up Application Config.", environment);
            throw;
        }
    }
    

    }

确保将json文件标记为“复制到输出目录”以始终复制。

然后您可以在需要它的应用程序中注册IConfiguration并调用JsonConfiguration.CreateConfigurationContainer(),我可能会将您的连接字符串映射到一个具体的模型类并在需要的地方注入。希望这足以使您前进。