Выберите один из двух объектов без `IFoo foo = new Foo1 ();` - PullRequest
1 голос
/ 03 марта 2011

Чтобы узнать больше об этом, я хочу попросить лучший путь

Что у меня есть

  1. Я использую 2 веб-сервиса, один для версии 1, а другой для версии 2
  2. В коде я использую каждую версию целым числом в таблице клиента, client.ws_version = 1 or 2

.

IWebServiceRepository repository;

if(client.ws_version == 1)
    repository = new WebServiceRepositoryVersion1();
else
    repository = new WebServiceRepositoryVersion2();

Что я изучил

Что это худшее, что нужно сделать :) 1021 *

Итак, вопрос в Как лучше всего это сделать? Фасад? Внедрение зависимости? другой процесс?

1 Ответ

3 голосов
/ 03 марта 2011

Если это простое утверждение, на самом деле это не плохой путь, но вы должны инкапсулировать свое утверждение в WebServiceRepositoryProvider

Код:

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

Вы можете настроить этофункциональность с множеством инверсий управляющих контейнеров, но было бы излишне использовать DI в вашем приложении для такой простой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...