여러 웹 API 컨트롤러가 포함 된 ASP.NET 웹 API에서 작업하고 있습니다. 각 컨트롤러에는 IMessageSender에 대한 종속성이 있습니다. CloudMessageSender, InMemoryMessageSender 및 NServiceBusMessageSender - 컨트롤러를 생성하는 Unity에서 이름 등록을 해결합니다.
public class OrderController: ApiController {
private readonly IMessageSender _msgSender;
public OrderController(IMessageSender msgSender) {
_msgSender = msSender;
}
}
나는 IMessageSender의 3 가지 다른 구현이있다. 나는 의존성 해결을 위해 단결하고 Unity.WebApi을 사용하고 내가 직면하고 그 IMessageSender
container.RegisterType<IMessageSender, CloudMessageSender>("res-cloud");
container.RegisterType<IMessageSender, InMemoryMessageSender>("res-inmem");
container.RegisterType<IMessageSender, NServiceBusMessageSender>("res-nsvc");
문제의 3 개라는 이름의 등록을 등록
public class CloudMessageSender: IMessageSender
{
}
public class InMemoryMessageSender: IMessageSender
{
}
public class NServiceBusMessageSender: IMessageSender
{
}
다른 컨트롤러 나 다른를 사용할 필요가있다 IMessageSender의 구현. 전의. 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/ –