[英]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.