ASP.NET Core Expose Config到DI注入服务 [英] ASP.NET Core Expose Config to DI Injected Service

查看:64
本文介绍了ASP.NET Core Expose Config到DI注入服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个ASP.NET Core WebAPI项目,并且试图将配置添加到我通过注入的 IEmailService 中,如下所示:

I have a ASP.NET Core WebAPI project and I am trying to add configuration to my IEmailServicethat I am injecting through DI like this:

services.AddTransient<IEmailSender, AuthMessageSender>();

AuthMessageSender 的实例如何进入配置文件中的设置?

How can instances of AuthMessageSender get to settings in the config file?

推荐答案

您应使用

  • 创建您的 EmailSettings 强类型配置类:
    1. Create your EmailSettings strongly typed configuration class:

    public class EmailSettings  
    {
        public string HostName { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
    }
    

    1. 更新您的 appsettings.json ,以包含一个映射到您的 EmailSettings 配置类的配置部分:
    1. Update your appsettings.json to include a configuration section that maps to your EmailSettings configuration class:

    {
      "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
          "Default": "Debug",
          "System": "Information",
          "Microsoft": "Information"
        }
      },
      "EmailSettings": {
        "HostName": "myhost.com",
        "Username": "me",
        "Password": "mysupersecretpassword",
      }
    }
    

    1. Startup 类的 ConfigureServices 调用中,将 appsettings.json 绑定到您的配置类
    1. In the ConfigureServices call of your Startup class, bind appsettings.json to your config class

    public void ConfigureServices(IServiceCollection services)  
    {
        services.Configure<MySettings>(
              options => Configuration.GetSection("EmailSettings").Bind(options));
    }
    

    1. 在您的 AuthMessageSender 类中,将 IOptions< EmailSettings> 的实例注入构造函数
    1. In your AuthMessageSender class, inject an instance of IOptions<EmailSettings> into the constructor

    public class AuthMessageSender
    {
        private readonly EmailSettings _settings;
        public AuthMessageSender(IOptions<EmailSettings> emailSettings)
        {
           _settings = emailSettings.Value;
          // _settings.HostName == "myhost.com";
        }
    }
    


    请注意,在第3步中,您还可以使用


    Note that in step 3, you can also use

    public void ConfigureServices(IServiceCollection services)  
    {
        services.Configure<MySettings>(Configuration.GetSection("EmailSettings"));
    }
    

    如果在 project.json 中添加对 Microsoft.Extensions.Options.ConfigurationExtensions 的引用:

    If you add a reference to Microsoft.Extensions.Options.ConfigurationExtensions in project.json:

    {
      "dependencies": {
         "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"
      }
    }
    

    这篇关于ASP.NET Core Expose Config到DI注入服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆