是否可以使用 autofac xml 配置配置同一接口的多个实现?
我想要完成的是执行多个作业的 Windows 服务。我有 2 个工作,它们通过短信或电子邮件从队列中发送消息。每项工作都是不同的装配。它们都依赖于 IQueuedMessageProvider。一项工作需要电子邮件实现,另一项需要短信实现。两个工作的构造函数如下所示(为问题而简化):
public SendSmsJob(IQueuedMessageProvider queuedMessageProvider)
{
_queuedMessageProvider= queuedMessageProvider;
}
public SendEmailJob(IQueuedMessageProvider queuedMessageProvider)
{
_queuedMessageProvider= queuedMessageProvider;
}
在 app.config 我注册了像这样的实现
<component type="MyApp.Plugin.Sms.Verizon.VerizonSmsService, MyApp.Plugin.Sms.Verizon" service="MyApp.Model.Messages.QueuedMessages.Providers.IQueuedMessageProvider, MyApp.Model" />
<component type="MyApp.Plugin.Email.Smtp.EmailService, MyApp.Plugin.Email" service="MyApp.Model.Messages.QueuedMessages.Providers.IQueuedMessageProvider, MyApp.Model" />
如何确保作业获得 de IQueuedMessageProvider 的正确实现?我已阅读有关使用名称和密钥https://code.google.com/p/autofac/wiki/TypedNamedAndKeyedServices解决此类问题的信息。
另一种选择是注册所有实现并使 IQueuedMessageProvider 成为 IEnumerable 并在构造函数中采用正确的实现。但我更喜欢在它自己的配置中解决它。甚至有可能,或者您对解决这个问题有什么更好的建议吗?