asp.net-core - ASP.NET Core中的项目之间共享配置文件

标签 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. 为所有共享依赖项创建类库

  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(),我可能会将您的连接字符串映射到具体的模型类并在需要的地方注入(inject)。希望这足以让您继续前进。

关于asp.net-core - ASP.NET Core中的项目之间共享配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52888880/

相关文章:

c# - Azure C# 函数中的 Appsettings.json 等效项

Angular 12 Production Build 生成大量 Lazy Chunk 文件

c# - 从 ASP.Net Core 1.1 迁移到 2.0 时出现 BadImageFormatException

c# - 在 c# HttpClient 4.5 中发布多部分/表单数据

c# - 在请求 URL 中使用命名参数进行路由

c# - 如何从 ASP.NET Core 中的 IMemoryCache 中删除(重置)所有对象

macos - "SharedCompilationId"任务不支持 ASP.NET CORE 2.1 Preview "Csc"参数

architecture - 对 ESB 作为点对点集成的解决方案感到困惑

java - 如何定义grok过滤?

java - Spring Cloud微服务服务器端口强制转换异常