Создание единственного универсального обработчика для Agatha?

Я пользуюсь библиотекой запроса/ответа Agatha (и StructureMap, как используется Agatha 1.0.5.0) для уровня служб, который я моделирую, и одной вещью, которую я заметил, является большое количество обработчиков, которые должны быть созданы. Это обычно имеет смысл, что любой паре типа запроса/ответа был бы нужен их собственный обработчик. Однако, поскольку это масштабируется к среде крупных предприятий, это будет БОЛЬШИМ КОЛИЧЕСТВОМ обработчиков.

То, что я начал делать, делит домен предприятия на логические классы процессора (десятки процессоров вместо многих сотен или возможно в конечном счете тысяч обработчиков). Конвенция состоит в том, что каждый тип запроса/ответа (все из которых наследовались доменной основной паре запроса/ответа, которые наследовались от Agatha) получает точно одну функцию в процессоре где-нибудь.

Универсальный обработчик (который наследовался RequestHandler Agatha) затем использует отражение в методе Дескриптора, чтобы найти метод для данного TREQUEST/TRESPONSE и вызвать его. Если это не может найти один или если это находит больше чем один, это возвращает TRESPONSE, содержащий сообщение об ошибке (сообщения стандартизированы в основном классе ответа домена).

Цель здесь состоит в том, чтобы позволить разработчикам по всему предприятию просто интересоваться записью их типов запроса/ответа и функций процессора в домене и не иметь для расходов дополнительных служебных классов обработчика созданий, которые все сделали бы точно то же самое (передайте управление к функции процессора).

Однако кажется, что я все еще должен определить класс обработчика (хотя пустой, так как основной обработчик заботится обо всем) для каждой пары типа запроса/ответа. Иначе следующее исключение выдается при диспетчеризации запроса сервису:

Код исключения StructureMap: 202 Никаких Экземпляра по умолчанию не определяются для PluginFamily Agatha. ServiceLayer. IRequestHandler '1 [[TSFG.Domain. DTO.Actions. HelloWorldRequest, TSFG.Domain. DTO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], Agatha. ServiceLayer, Version=1.0.5.0, Culture=neutral, PublicKeyToken=6f21cf452a4ffa13

Существует ли способ, которым я не вижу, чтобы сказать StructureMap и/или Agatha всегда использовать основной класс обработчика для всех пар типа запроса/ответа? Или возможно использовать Отражение. Испустите для генерации пустых обработчиков в памяти в приложении, начинают только удовлетворять требование?

Я не на 100% знаком с этими библиотеками и учусь, поскольку я продвигаюсь, но до сих пор мои попытки обоих тех возможных подходов были неудачны. Кто-либо может дать некоторый совет при решении этого или возможно предложить другой подход полностью?

1
задан Aaron Fischer 25 August 2010 в 21:52
поделиться

1 ответ

Я не знаком с Агатой. Но если вы хотите, чтобы все запросы для IRequestHandler выполнялись с помощью BaseHandler , вы можете использовать следующую регистрацию StructureMap:

For(typeof(IRequestHandler<>)).Use(typeof(BaseHandler<>));

Когда что-то запрашивает ] IRequestHandler , он должен получить BaseHandler .

2
ответ дан 3 September 2019 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: