0

我有一个队列服务,它必须根据队列中对象的类型注入不同的依赖关系图。我正在使用Structure Map.

因此,如果队列中的对象是使用TypeA的具体类TypeA,如果是TypeB,则使用的具体类TypeB

我想避免队列中的代码,例如:

if (typeA)
{
   // setup TypeA graph
}
else if (typeB) {
   // setup TypeB graph
}

在图中,我还有一个泛型类,例如IReader(ISomething, ISpomethingElse)whereIReader是泛型的,但需要为类型注入正确的ISomethingISomethingElseISomething也会有依赖等等。

目前我创建一个TypeATypeB对象并使用 StructureMap 将一个通用处理器类注入其中,然后将factory手动注入一个TypeATypeB工厂传递给如下方法:

Processor.Process(new TypeAFactory)  // perhaps I should have an abstract factory...

但是,因为工厂随后创建了IReader上面提到的泛型,所以我最终手动注入了所有 TypeA 或TypeB那里的类。

我希望这足够有意义。

我是新手,StructureMap希望有人可以在这里为我指明正确的方向,以获得灵活而优雅的解决方案。

谢谢

4

1 回答 1

0

我不知道我是否完全理解您的问题,但一般来说,您的队列处理器需要访问某种工厂来处理这些对象。最方便的方法是,如果您的队列由消息/命令 (DTO) 组成,并且您对命令处理逻辑有某种抽象,例如ICommandHandler<TCommand>.

在这种情况下,您的队列处理器可能如下所示:

private readonly ICommandHandlerFactory factory;

public void Process(IEnumerable<object> commandQueue)
{
    foreach (object command in commandQueue)
    {
        dynamic handler = this.factory.CreateHandlerFor(command.GetType());

        handler.Handle((dynamic)command);
    }
}
于 2013-11-08T15:51:39.720 回答