UnityContainer:解析后的条件逻辑

时间:2010-11-18 09:47:03

标签: unity-container ioc-container containers

我有一个包含3种不同实现的界面。我使用Unity Container在Web应用程序的Web.config中将3个实现注册为命名别名。

有没有办法使用Unity,根据某些逻辑解析其中一个已注册的实例。逻辑包括联系DB以决定要解决的实现。

感谢您的帮助。

此致 比拉尔

2 个答案:

答案 0 :(得分:2)

您可以在抽象工厂中实现逻辑并将其注入:

public interface IMyInterface { }

public interface IMyInterfaceFactory {
   IMyInterface GetMyInterface();
}

public class MyInterfaceFactory : IMyInterfaceFactory  {
       private readonly IUnityContainer _container;
       public MyInterfaceFactory(IUnityContainer container) { 
           _container = container; }

       IMyInterface GetMyInterface() {
            var impName = Get_implementation_name_from_db();
            return container.Resolve<IMyInterface>(impName);
        }
}

答案 1 :(得分:1)

您可以创建一个“路由器”实现,该实现知道如何将请求路由到其他实现之一:

// Here is a possible implementation of the router. There are 
// of course many ways to do this.
public class MyRouterImpl : IMyInterface
{
    List<IMyInterface> implementations = new List<IMyInterface>();

    public MyRouterImpl(MyImpl1 i1, MyImpl2 i2, MyImpl3 i3)
    {
        this.implementations.Add(i1);
        this.implementations.Add(i2);
        this.implementations.Add(i3);
    }

    void IMyInterface.Method()
    {
        int indexOfImplementationToExecute = 
            GetIndexOfImplementationToExecute();

        IMyInterface impl =
            this.implementations[indexOfImplementationToExecute];

        impl.Method();
    }
}