首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Castle Windsor类型工厂关闭打开泛型

Castle Windsor类型工厂关闭打开泛型
EN

Stack Overflow用户
提问于 2014-03-27 22:04:44
回答 1查看 301关注 0票数 1

我不确定这是否可能,但我们想要做以下事情

我们有处理某种类型消息的处理器。每条消息都有一个MessageOrigin。处理器需要基于MessageOrigin的不同映射器。处理器对MessageOrigin不感兴趣。

这给我们提供了以下代码(完整的Gist here)

代码语言:javascript
复制
public class ConcreteMessageProcessor<TMessageOrigin> 
    : IProcessor<ConcreteMessage, TMessageOrigin>
{
    public ConcreteMessageProcessor(IMapper<TMessageOrigin> mapper){}
}

我们还有一个用于创建处理器的TypedFactory:

代码语言:javascript
复制
public interface IProcessorFactory
{
    IProcessor[] GetAllProcessorsForMessage(Message message, 
        IMessageOrigin origin);
}

与选择器结合使用:

代码语言:javascript
复制
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仍然是打开的。我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2014-03-27 22:33:30

根据我在您的要点中所看到的,您没有一个同时指定其泛型类型的ProcessorImp实现。这当然就是工厂不能解析IProcessor的原因:您试图解析服务IProcessor<MessageImpl, MessageOriginImp>,但是您已经注册的组件实现了

代码语言:javascript
复制
IProcessor<Message, TMessageOrigin>
where TMessageOrigin : IMessageOrigin

也许您应该重新考虑您尝试注册/解析服务的方式;您的MessageOriginImpl可以有一个接口IIsOriginFor<MessageImpl>,工厂将根据MessageImpl的类型来解析它们

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22690025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档