0

IWindsorContainer をプロパティとして挿入する際に問題が発生しています。

MVC3を使用しています。独自の IView と ViewEngine を作成しました。ビュー内から、Windsor に登録されている型に基づいてビューを動的に構築します。

1 つの条件 (「リスト」ビュー) について、Windsor に登録されているすべての IMyTypes のリストを表示したいと考えています。私の global.asax では、Windsor ビューを次のように登録します。

container.Register(Component.For<IWindsorContainer>().Instance(container));

次に、IView の実装で、次のようなプロパティを宣言します。

public IWindsorContainer Container { get; set; }

実際の IView は別のコンポーネントにあります。Render メソッドに到達したら、次のようにします。

IRuleDataDefinition[] ruleDatas = Container.ResolveAll<IRuleDataDefinition>();

ただし、「コンテナー」は常に null です。IView を作成している方法が原因ですか (私は new を使用しているだけで、Windsor に登録されていませんか?) IWindsorContainer 自体に問題がありますか? それとも、すべてが間違っているだけですか?

また、「Container.Resolve を使用している場合は、おそらく間違っている」と言っている他の人も読みました。したがって、私がこれを間違っている場合は、お知らせください。


編集

おそらく、質問を表現するより良い方法は次のとおりです。IMyType のすべての登録済みバージョンをループする必要があります。


2番目の編集

依存関係チェーン全体に Windsor を使用することで動作するようになりました。もちろん、これはあなたがすべきことです。

4

1 に答える 1

3

コンテナに依存するべきではありません...これはアンチパターンであり、サービスロケータのようなにおいがします。代わりに、型付きファクトリはどうですか? 型付けされたファクトリは、共通のインターフェイスに基づいて、指定されたコンポーネントのリストを返す場合があります。

于 2012-06-14T16:34:02.807 に答える