Как правильно структурировать сервис, чтобы использовать Виндзор? - PullRequest
1 голос
/ 23 ноября 2010
class CustomService(IProcessor processor) : ICustomService

Класс CustomService имеет зависимость, которая будет внедрена.Есть несколько реализаций для IProcessor.Какая реализация должна использоваться, определяется настройкой, которая хранится в базе данных для текущего пользователя.

Сначала я подумал о реализации IHandlerSelector, который бы извлекал настройку из базы данных и определял, какаяреализация для использования.Но есть бизнес-логика для случаев, когда параметр отсутствует в базе данных и т. Д. .... Поскольку есть бизнес-логика, я не уверен, что было бы правильно поместить это в IHandlerSelector.

* 1009.* Я думал о создании другого класса с именем TopService:
class TopService(ISettingsProvider provider, IProcessorFactory procFactory, ICustomServiceFactory serviceFactory)

TopService, использующего две типизированные фабрики.Он будет использовать ISettingsProvider для получения настроек из базы данных и использовать IProcessorFactory для разрешения соответствующего IProcessor.После получения правильного IProcessor я бы использовал фабрику ICustomServiceFactory, чтобы разрешить CustomService.

Однако, мне кажется, это немного не так.Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 10 февраля 2011

Почему бы просто не передать IProcessorFactory в класс CustomerService?Это все равно изолирует ваш CustomerService класс от реализации вашего IProcessorFactory.Таким образом, если ваша бизнес-логика выбора правильного IProcessor изменится в будущем, вы можете просто создать новый IProcessorFactory.

Я бы мог представить, что это что-то вроде этого:

public interface IProcessorFactory {
     IProcessor GetProcessor();
     IProcessor GetProcessor(string processorType);
}

Тогда в вашем CustomerService классе может быть вызван правильный метод GetProcessor() в зависимости от того, предоставлена ​​ли настройка для клиента.

...