簡體   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