选择两个对象中的一个,不要`IFoo foo = new Foo1();`

时间:2011-03-03 18:15:30

标签: asp.net-mvc c#-4.0

为了更多地了解这一点,我想要求最好的路径

我有什么

  1. 我正在使用2个Web服务,一个用于版本1,另一个用于版本2
  2. 在代码中,我在客户端表中使用每个版本的整数client.ws_version = 1 or 2
  3. IWebServiceRepository repository;
    
    if(client.ws_version == 1)
        repository = new WebServiceRepositoryVersion1();
    else
        repository = new WebServiceRepositoryVersion2();
    

    我学到了什么

    这是最糟糕的事情:)

    所以问题是实现这个目标的最佳方式是什么?立面?依赖注入?其他过程?

1 个答案:

答案 0 :(得分:3)

如果声明很简单,那实际上并不是一个糟糕的方法,但你应该将你的声明封装在WebServiceRepositoryProvider

代码:

public class WebServiceRepositoryProvider
{
    public  IWebServiceRepository GetRepository(ClientTable context)
    {
        return context.ws_version == 1 
            ? new WebServiceRepositoryVersion1() 
            : new WebServiceRepositoryVersion2();
    }
}

您可以通过控制容器的多次反转来配置此功能,但在您的应用中为这样一个简单的功能实现DI会是过分的。