0

キュー内のオブジェクトのタイプに応じて異なる依存関係グラフを挿入する必要があるキュー サービスがあります。を使用してStructure Mapいます。

したがって、キュー内のオブジェクトが の場合はTypeAの具象クラスTypeAが使用され、 の場合TypeBは の具象クラスTypeBが使用されます。

次のようなキュー内のコードを避けたい:

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

グラフ内には、IReader(ISomething, ISpomethingElse)whereなどのジェネリック クラスもありますが、ジェネリックIReaderですが、正しい型ISomethingISomethingElsefor 型を挿入する必要があります。 ISomething依存関係などもあります。

現在、TypeAまたはTypeBオブジェクトを作成し、StructureMap を使用してジェネリック Processor クラスを挿入してから、次のようなメソッドにfactory手動でTypeAまたはTypeBファクトリを挿入します。

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 に答える