我过去曾经使用过Autofac,虽然有时它可能有点复杂但它从来没有缺少我需要的功能。现在我试图在ASP.NET Core中使用内置的依赖注入,并且无法实现以下功能:
Startup.cs
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
类中使用它,但结构是相同的,所以我想尽可能重用。
答案 0 :(得分:0)
有几种方法可以做到这一点,但我不认为它们中的任何一种都是如你所希望的那样优雅。我猜您最好的办法是创建一个继承自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
}
}