1

IOC/DI ツールとして structuremap を見ています。この例を見ると:

http://docs.structuremap.net/QuickStart.htm

意味をなさない唯一のことは、インターフェイスがあり、そこからいくつかの具象型を派生させる場合、コード内にあることです。

public class ClassThatGetsAnIValidator { public void SaveObject(object objectToSave) { // StructureMap から適切な IValidator を取得します IValidator validator = ObjectFactory.GetInstance();

        var notification = validator.Validate(objectToSave);
        if (notification.IsValid())
        {
            // save the object
        }
    }
}

どのバリデータを取得したかを知るにはどうすればよいですか? IE 私は AlphaBetValidator、NumericValidator など、異なるメソッド本体などを持っているかもしれません.....

これがポイントだと思います:

「何」と「どのように」StructureMap がそれらの要求されたサービスを構築または検索するかを登録する (退屈な部分ですが、何年にもわたってずっと良くなっています)

私が把握するのに苦労しています。

助けてください。

ありがとう

4

1 に答える 1

1

ドキュメントから:

登録された PluginType のインスタンスが 1 つしかない場合、そのインスタンスが PluginType のデフォルトであると見なされます。それ以外の場合、PluginType に複数のインスタンスがある場合、どのインスタンスがデフォルトであるかを StructureMap に明示的に通知する必要があります。そうしないと、GetInstance() の呼び出しで例外 (202) がスローされます。

特定のインスタンスに解決するには、命名メカニズムを使用できます。同じドキュメントページから:

型の「名前付き」インスタンスを取得すると有利な場合があります。複数の外部配送システムとのインターフェースに接続する必要があるシステムを構築しているとしましょう。アダプターの背後にある各外部配送の詳細を隠す、IShippingSystem と呼ばれるシステムのインターフェイスを設計しました。コードの残りの部分は、IShippingSystem と対話する方法だけを「知っている」必要がありますが、ある時点で、一部のクラスは、IShippingSystem の適切なインスタンスを選択して取得する方法を知る必要があります。StructureMap のような IoC コンテナーが登場する前は、Factory クラスと、場合によっては Builder クラスを手動でコーディングして、構築を行っていたでしょう。StructureMap では、このコードは単純に ObjectFactory.GetNamedInstance(Type, string) メソッドを呼び出すだけです。

IShippingService internationalService = ObjectFactory.GetNamedInstance<IShippingService>("International");

IShippingService domesticService = ObjectFactory.GetNamedInstance<IShippingService>("Domestic");
于 2012-06-26T14:08:33.367 に答える