我不确定这是否可能,但我们想要做以下事情
我们有处理某种类型消息的处理器。每条消息都有一个MessageOrigin。处理器需要基于MessageOrigin的不同映射器。处理器对MessageOrigin不感兴趣。
这给我们提供了以下代码(完整的Gist here)
public class ConcreteMessageProcessor<TMessageOrigin>
: IProcessor<ConcreteMessage, TMessageOrigin>
{
public ConcreteMessageProcessor(IMapper<TMessageOrigin> mapper){}
}我们还有一个用于创建处理器的TypedFactory:
public interface IProcessorFactory
{
IProcessor[] GetAllProcessorsForMessage(Message message,
IMessageOrigin origin);
}与选择器结合使用:
public class ProcessorSelector : DefaultTypedFactoryComponentSelector
{
protected override Type GetComponentType(MethodInfo method,
object[] arguments)
{
return typeof(IProcessor<,>).MakeGenericType(arguments[0].GetType(),
arguments[1].GetType()).MakeArrayType();
}
}然而,当我们调用IProcessorFactory时,我们永远得不到处理器。我猜这是因为当类型在容器中注册时,TMessageOrigin仍然是打开的。我该如何解决这个问题?
发布于 2014-03-27 22:33:30
根据我在您的要点中所看到的,您没有一个同时指定其泛型类型的ProcessorImp实现。这当然就是工厂不能解析IProcessor的原因:您试图解析服务IProcessor<MessageImpl, MessageOriginImp>,但是您已经注册的组件实现了
IProcessor<Message, TMessageOrigin>
where TMessageOrigin : IMessageOrigin也许您应该重新考虑您尝试注册/解析服务的方式;您的MessageOriginImpl可以有一个接口IIsOriginFor<MessageImpl>,工厂将根据MessageImpl的类型来解析它们
https://stackoverflow.com/questions/22690025
复制相似问题