1

依存関係が既にコンテナー内にあるオブジェクトのプロパティにマップされるように指定するためのショートカットはありますか? これを行うためのファクトリ メソッドを記述できることはわかっていますが、もっとエレガントな方法があるかどうか疑問に思っています。

コンポーネント A にコンポーネント B のインスタンスにマップされる依存関係があることを指定するには、A に名前を付けてから、B のインストーラーを次のように記述します。

container.Register(Component.For<IMdiController>()
                        .ImplementedBy<MdiController>()
                        .DependsOn(Dependency.OnComponent("shell", "shell")));

この例では、依存関係 "shell" がコンポーネント "shell" ではなく、そのコンポーネントのプロパティ (例: "shell.SomeProperty" - このドット構文を既に試しましたが、うまくいきません) にマップされていると想像してください。

4

1 に答える 1

1

私はあなたの質問を正しく理解していないかもしれませんが、おそらくあなたが望むのは動的パラメータです。

ドキュメントからのこのプロパティの説明は次のとおりです。

コンポーネントの作成時までわからない依存関係を提供する必要がある場合があります。たとえば、サービスの作成タイムスタンプが必要だとします。登録時にそれを取得する方法はわかりますが、その特定の値がどうなるかはわかりません (実際、新しいインスタンスを作成するたびに異なります)。このシナリオでは、DynamicParameters メソッドを使用します。

あなたの場合、依存関係の値を取得するために、コンテナから解決されSomePropertyたコンポーネントでプロパティが呼び出されるように、次のようなことを行うことができます。Shellsomething

container.Register(
    Component
        .For<IMdiController>()
        .ImplementedBy<MdiController>()
        .DynamicParameters((k, d) => d["something"] = k.Resolve<Shell>().SomeProperty));

このように解決を呼び出すことに影響があるかどうかはわかりませんが、問題ないかもしれません。

于 2012-08-13T06:54:22.833 に答える