【问题标题】:What is the purpose of the Configure method of IServiceCollection when you can DI settings without it?当您可以在没有它的情况下进行 DI 设置时,IServiceCollection 的 Configure 方法的目的是什么?
【发布时间】:2020-11-25 11:16:25
【问题描述】:

我已经这样做了:

services.Configure<ApplicationSettings>(_configuration.GetSection("ApplicationSettings"));

我认为这可以让我注入 ApplicationSettings,但显然不是。

我可以只做GetSection(...) 并将其注册为单例,但是.Configure 的意义何在?

msdn 文档说“注册 TOptions 将绑定的配置实例,并在配置更改时更新选项。”

目前尚不清楚如何设置模式以在我的应用程序中将配置用作 DI。

这是我试图实现的 SO 问题:

How do I transform appsettings.json in a .NET Core MVC project?

【问题讨论】:

    标签: c# .net-5


    【解决方案1】:

    这正是为强类型设置部分 ApplicationSettings. 配置依赖注入

    public void ConfigureServices(IServiceCollection services)
    {
        // ...
    
        services.Configure<ApplicationSettings>(_configuration.GetSection("ApplicationSettings"));
    
        // You can register your service
        services.AddTransient<SomeService>();
    }
    

    然后您实现该服务并自动将设置部分注入其中。

    public class SomeService
    {
        private readonly IOptions<ApplicationSettings> _options;
    
        public SomeService(IOptions<ApplicationSettings> options)
        {
            _options = options;
        }
    
        public string AddPrefix(string value)
        {
            // AddPrefix("test value")
            // will return:
            // PREFIX - test value
            return $"{_options.Value.Prefix} - {value}";
        }
    }
    

    鉴于您将 ApplicationSettings 定义为:

    public class ApplicationSettings
    {
        public string Prefix { get; set; }
    }
    

    你的appsettings.json 应该是这样的:

    {
        "ApplicationSettings": {
            "Prefix": "PREFIX"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 2021-10-19
      • 1970-01-01
      相关资源
      最近更新 更多