複数のWeb APIコントローラーを含むASP.NET Web APIを使用しています。各コントローラはIMessageSenderに依存します。 CloudMessageSender、InMemoryMessageSenderとNServiceBusMessageSender - コントローラーを作成するUnityからの名前解決の解決
public class OrderController: ApiController {
private readonly IMessageSender _msgSender;
public OrderController(IMessageSender msgSender) {
_msgSender = msSender;
}
}
私はIMessageSenderの異なる3つの異なる実装を持っています。
public class CloudMessageSender: IMessageSender
{
}
public class InMemoryMessageSender: IMessageSender
{
}
public class NServiceBusMessageSender: IMessageSender
{
}
私が直面しています問題は、異なるコントローラのため、私は別のを使用する必要があるということです依存関係の解決のためのUnityとUnity.WebApiを使用していますし、IMessageSender
container.RegisterType<IMessageSender, CloudMessageSender>("res-cloud");
container.RegisterType<IMessageSender, InMemoryMessageSender>("res-inmem");
container.RegisterType<IMessageSender, NServiceBusMessageSender>("res-nsvc");
の3件のという名前の登録を登録していますIMessageSenderの実装。 Ex。 OrdersController
はCloudMessageSender
を使用する必要がありますが、CustomersController
はInMemoryMessageSender
を使用する必要があります。デフォルトでは、Unityは名前のない解決法または私の場合は最初のものを注入します。
IMessageSenderのどのインプリメンテーションを注入するコントローラを指定するか、制御するにはどうすればよいですか?
http://stackoverflow.com/questions/18665324/unity-register-for-one-interface-multiple-object-and-tell-unity-where-to-inject –
名前付き登録を開始すると、 [Pure DI](http://blog.ploeh.dk/2014/06/10/pure-di/)に切り替える方がよいでしょう。詳細については、この記事を参照してください:http://criticalsoftwareblog.com/index.php/2015/08/23/why-di-containers-fail-with-complex-object-graphs/ –