首页 文章

访问IOptions <T>对象.NET Core

提问于
浏览
2

我是.NET Core的新手,如果这是一个新手问题,我很抱歉 . 我使用VS 2017在.NET Core 2中创建了一个Web API项目 .

对我来说,我有 appsettings.json 文件与一些连接设置 .

从microsoft教程阅读 IOptions<T> 后,我正在做类似以下的事情:

public void ConfigureServices(IServiceCollection services)
{
    services.AddOptions();
    services.Configure<MyOptions>(Configuration);

    // I want to access MyOptions object here to configure other services?how do i do that?

    service.AddHangfire( // Get MyOptions.HangfireConenctionString etc.)
}

如何在 ConfigureServices 中访问创建的 MYOptions 对象,以及是否需要在 Configure(IApplicationBuilder app,..) 方法中访问它?

我只在教程中看到了控制器中的注入 IOptions<T> 的示例 .

2 回答

  • 2

    要使用某些设置

    public void ConfigureServices(IServiceCollection services)
    {
        // Load the settings directly at startup.
        var settings = Configuration.GetSection("Root:MySettings").Get<MySettings>();
    
        // Verify mailSettings here (if required)
    
        service.AddHangfire(
            // use settings variable here
        );
    
        // If the settings needs to be injected, do this:
        container.AddSingleton(settings);
    }
    

    如果您需要在应用程序组件中使用配置对象,则会向组件中注入 IOptions<T> ,因为这只会导致无法解决的问题,如here所述 . 而是直接注入值,如以下示例所示 .

    public class HomeController : Controller  
    {
        private MySettings _settings;
        public HomeController(MySettings settings)
        {
            _settings = settings;
        }
    }
    
  • 7

    你很亲密

    services.Configure<MyOptions>(options => Configuration.GetSection("MyOptions").Bind(options));
    

    您现在可以使用依赖注入来访问MyOptions

    public class HomeController : Controller  
    {
        private MySettings _settings;
        public HomeController(IOptions<MySettings> settings)
        {
            _settings = settings.Value
            // _settings.StringSetting == "My Value";
        }
    }
    

    我从安德鲁·洛克(Andrew Lock)的这篇优秀文章中获取了片段:https://andrewlock.net/how-to-use-the-ioptions-pattern-for-configuration-in-asp-net-core-rc2/ .

相关问题