autofac xml 構成を使用して、同じインターフェースの複数の実装を構成することは可能ですか?
私が達成しようとしているのは、複数のジョブを実行する Windows サービスです。SMSまたは電子メールでキューからメッセージを送信する2つのジョブがあります。すべてのジョブは異なるアセンブリです。どちらも IQueuedMessageProvider に依存しています。1 つのジョブには電子メールの実装が必要で、もう 1 つは SMS の実装が必要です。両方のジョブのコンストラクタは次のようになります (質問のために簡略化されています)。
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" />
ジョブが IQueuedMessageProvider の適切な実装を確実に取得するにはどうすればよいですか? 名前とキーに関するこの種の問題の解決について読んだことがありますhttps://code.google.com/p/autofac/wiki/TypedNamedAndKeyedServices。
別のオプションは、すべての実装を登録し、IQueuedMessageProvider を IEnumerable にして、コンストラクターで適切な実装を取ることです。しかし、私はそれ自体の構成でそれを解決することを好みます。それは可能ですか、これを解決するためのより良い提案はありますか?