如何使用Unity Dependecy Injection Web API实现Strategy / Facade模式

如何告诉Unity.WebApidependency injection框架,在正确的控制器中注入正确的类?

DI项目容器

public class UnityContainerConfig { private static IUnityContainer _unityContainer = null; public static IUnityContainer Initialize() { if (_unityContainer == null) { _unityContainer = new Microsoft.Practices.Unity.UnityContainer() .RegisterType("MyClass1") .RegisterType("MyClass2") } } 

-MVC PROJECT-

 public static class UnityConfig { public static void RegisterComponents() { GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(DependencyInjection.UnityContainer.UnityContainerConfig.Initialize()); } } 

控制器1:

  private IMyInterface _myInterface ///MyClass1 public XController( IMyInterface myInterface ) { _myInterface = myInterface } 

控制器2:

  private IMyInterface _myInterface ///MyClass2 public YController( IMyInterface myInterface ) { _myInterface = myInterface } 

而不是使用策略或外观来解决这个问题,更好的解决方案是重新设计您的接口,使每个控制器都是唯一的。 一旦您拥有唯一的接口类型,您的DI容器将自动将正确的服务注入每个控制器。

选项1

使用通用接口。

 public interface IMyInterface { } public class XController { private readonly IMyInterface myInterface; public XController(IMyInterface myInterface) { this.myInterface = myInterface; } } public class YController { private readonly IMyInterface myInterface; public YController(IMyInterface myInterface) { this.myInterface = myInterface; } } 

选项2

使用接口inheritance。

 public interface IMyInterface { } public interface IXMyInterface : IMyInterface { } public interface IYMyInterface : IMyInterface { } public class XController { private readonly IXMyInterface myInterface; public XController(IXMyInterface myInterface) { this.myInterface = myInterface; } } public class YController { private readonly IYMyInterface myInterface; public YController(IYMyInterface myInterface) { this.myInterface = myInterface; } }