1

Castle Windosr コンテナを使用しています。実行時にいくつかのコンストラクターの依存関係を指定できるようにしたいと考えています。これは明らかに、ディクショナリを使用する Resolve オーバーロードを使用して行うことができます。ただし、ルートの依存関係のランタイム依存関係を指定したい場合は、迷子になります。現時点では、それぞれを明示的に作成してベッドに入れることで回避しました。本質的にはデコレータのシナリオであり、のインスタンスを取得したい装飾中のオブジェクトの実行時に依存関係を提供しながら、宣言子。何か案は?以下で行っていることを実行する必要はなく、依存関係が同じではない場合があるため、デカレーター コンストラクターが下のオブジェクトにデータを入力しないようにしたいと考えています。

   public static IActivity GetActivityFromIoC(string key, Message message, Audit audit)
        {

            IActivity activity = IoC.Resolve<IActivity>(key, new Dictionary<
                                                                              string, object>(){
                { "message", message }
                });

            IActivity auditingActivity = IoC.Resolve<IActivity>("auditing.activity", new Dictionary<
                                                                              string, object>(){
            { "activity", activity },     
            { "message", message },
            { "audit", audit }

                });

            return auditingActivity;

        }
4

1 に答える 1

2

おそらく、これを行う独自のISubDependencyResolver実装を作成することで、これを処理できます。コンテナーだけではそれは許可されません。なんで?簡単な答えは、コンポーネントの依存関係について仮定を立てることです。これはノーノーであり、コンテナは呼び出し元からこの種の知識を取り除くことがすべてです。

于 2009-01-22T22:11:53.890 に答える