Appsettings 和中间件 Core 2.1

Appsettings and middleware Core 2.1

我制作了一个自定义中间件,现在我想访问我的解决方案中另一个项目中的应用程序设置。是不是应该在中间件的构造函数中注入IConfiguration对象,并加上Microsoft.Extensions.Configuration的using语句?或者有更好的方法吗?

我正在使用带有 Core 2.1 的 ASP.net 网页。

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using System;
using System.Threading.Tasks;
public class MyMiddleware
{
  public IConfiguration _configuration;
  public MyMiddleware(RequestDelegate next, IConfiguration config)
  {
     _next = next;
     _ configuration = config;
  } 

如果您不需要将所有配置传递给您的中间件,而只需要一部分,您可以使用

IOptions<T>

创建MyConfig.csClass文件:

public class MyConfig
{
   public string MyConfig1 {get; set;}
   public string MyConfig2 {get; set;}
}

在 Startup.cs

中的 ConfigureServices 方法中
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
}

在你的中间件中

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using System;
using System.Threading.Tasks;

public class MyMiddleware
    {
        private readonly IOptions<MyConfig> _appSettings;
        public MyMiddleware(RequestDelegate next, IOptions<MyConfig> config)
        {
            _next = next;
            _configuration = config;
        }

        public MyMethod()
        {
            _configuration.Value.MyConfig1
        }
    }

在 appsettings.json 文件中:

{
  "AppSettings": {
    "AppId": "0001",
    "AppName": "xxxx",
  },
  "MyConfig": {
    "MyConfig1": "xxxxxxx",
    "MyConfig2": "xxxxxxx",
  },
}