Castle.Windsor: необязательное разрешение компонента из типизированной фабрики
У меня есть настройка службы WCF с Castle.Windsor; сообщения поступают диспетчеру, который отправляет их нужному компоненту (в основномIHandler<Message>
с сообщением, являющимся запросом).
Однако в некоторых случаях есть еще один дополнительный, прежде чем обработчик может действовать; сообщение должно быть дополнено данными, поступающими откуда-то еще. Я хочу проверить, существует ли инжектор для типа моего сообщения и, если он есть, запустите его.
IInjector<Message> Injector = InjectorFactory.RetrieveInjector<Message>();
if (Injector != null)
{
Logger.InfoFormat("IInjector<{0}> OK", input.GetType().Name);
Injector.InjectCode(input, "Data coming from somewhere else");
}
Причина этого заключается в том, что в будущем кто-то может создать плагин сIInjector<Message>
и я хочу забрать его в будущем; но на данный момент его не существует.
Можно ли иметь типизированную фабрику, возвращающую ноль, если компонент не найден, вместоComponentNotFoundException
?
РЕДАКТИРОВАТЬ
Как уже говорилось с @Steven, я отвечу на свой вопрос, чтобы составить то, что привело меня к решению и решению, которое я нашел. Сначала давайте переформулируем проблему
У меня есть служба WCF, в основном следуя структуре, описанной Кшиштофом Кушмичем вЭта статья
Однако, прежде чем вызывать обработчики, я хотел иметь опциональную операцию, при которой входящее сообщение было бы изменено при необходимости.
private static void DoActualWork<T>(T command)
{
IInjector<T> Injector = injectorFactory.GetInjector<T>();
if (Injector != null) { Injector.InjectThings(command, ""); }
var handlers = factory.GetHandlersForCommand(command);
foreach (var handler in handlers)
{
handler.Execute();
}
}
У меня была проблема с инжекторным заводом; когда я попросил его найти несуществующий компонент, он бросил быComponentNotFoundException
, Что мне бы понравилось, так это чтобы фабрика признала, что там не было компонента, и просто вернула ноль.