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