我有一个带有 Castle.Windsor 的 WCF 服务设置;消息到达调度程序,调度程序将它们发送到正确的组件(基本上是一个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>
我想在未来的某个时间挑选它;但目前它还不存在。
当找不到组件时,是否可以让类型化工厂返回 null 而不是抛出异常ComponentNotFoundException
?
EDIT
正如与@Steven 讨论的那样,我将回答我自己的问题,以便编译是什么引导我找到解决方案和我找到的解决方案。首先我们重申一下问题
我有一个 WCF 服务,基本上遵循 Krzysztof Koźmic 在中描述的结构本文
但是,在调用处理程序之前,我希望有一个可选操作,其中传入的消息将在需要时进行修改。
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();
}
}
我在使用 InjectorFactory 时遇到了问题;当我要求它找到一个不存在的组件时,它会抛出一个ComponentNotFoundException
。我希望工厂能够识别出没有组件并简单地返回 null。