应用程序设置和中间件 Core 2.1

Olo*_*f84 0 middleware appsettings asp.net-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;
  } 
Run Code Online (Sandbox Code Playgroud)

Tar*_*ncu 6

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

IOptions<T>
Run Code Online (Sandbox Code Playgroud)

创建 MyConfig.cs 类文件:

public class MyConfig
{
   public string MyConfig1 {get; set;}
   public string MyConfig2 {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

在Startup.cs的ConfigureServices方法中

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
}
Run Code Online (Sandbox Code Playgroud)

在你的中间件中

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
        }
    }
Run Code Online (Sandbox Code Playgroud)

在 appsettings.json 文件中:

{
  "AppSettings": {
    "AppId": "0001",
    "AppName": "xxxx",
  },
  "MyConfig": {
    "MyConfig1": "xxxxxxx",
    "MyConfig2": "xxxxxxx",
  },
}
Run Code Online (Sandbox Code Playgroud)