繁体   English   中英

ASP.NET Core DI不同的选项实例取决于请求的类

[英]ASP.NET Core DI different options instance depending on requesting class

我过去曾经使用过Autofac,尽管有时它可能有点复杂,但它从来没有缺少我需要的功能。 现在,我试图在ASP.NET Core中使用内置的依赖项注入,并且在实现以下目标时遇到了麻烦:

启动文件

public void ConfigureServices(IServiceCollection services) {
  // Use these settings by default
  services.Configure<EmailerSettings>(Configuration.GetSettings("DefaultEmailer"));

  // Would like to specify different settings that apply to the SpecialEmailer class only
  //services.Configure<EmailerSettings>(Configuration.GetSettings("SpecialEmailer"));
}

依赖于DI的类

public class Emailer {
    public Emailer(IOptions<EmailerSettings> settings) {
       // Should get the default settings
    }
}

public class SpecialEmailer {
    public SpecialEmailer(IOptions<EmailerSettings> settings) {
       // Should get the special settings
    }
}

开箱即用的DI有什么办法做到这一点? 我当然可以创建SpecialEmailerSettings并在SpecialEmailer类中使用它,但是结构是相同的,因此我想尽可能地重用。

有几种方法可以做到这一点,但我认为您所希望的其中任何一种都不优雅。 我想你最好的选择是创建另一个设置模式SpecialEmailerSettings从继承EmailerSettings 我知道您已经想到了这一点,并且想要重用,但是我认为继承是重用的一种方式。 这只是另外一行:

public class SpecialEmailerSettings : EmailerSettings { }

然后像这样加载它:

services.Configure<EmailerSettings>(Configuration.GetSettings("DefaultEmailer"));
services.Configure<SpecialEmailerSettings>(Configuration.GetSettings("SpecialEmailer"));

最后在课堂上使用它:

public class SpecialEmailer {
    public SpecialEmailer(IOptions<SpecialEmailerSettings> settings) {
       // Should get the special settings
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM