2012-03-02 10 views
0

でNinject依存性注入コンテナと、私は次のような方法で自己結合を実行することができます。自己結合城ウィンザーとC#の

MyClass mc = ninjectKernel.Get<MyClass>(); 

は城ウィンザーでの動作と同等の並べ替えはありますか?

をインストーラでは:ヨアヒムIsakssonのコメントに従い

+0

私はWindsorの「MyClass mc = container.Resolve ();」と言っていますが、これは同じことをしているようです。 –

+0

Doh、明らかです。ありがとう。あなたがそれを掲示したいなら、それは疑い深く私の答えのように見えます。それを動作させるには、それを自分自身に登録しなければなりませんでした。 'container.Register(Component.For ().ImplementedBy ());' –

+1

@JamesWiseman正しくリコールすれば、ちょっとした入力を省くことができます: 'container.Register(Component.For ());' when "for"型の引数はクラスであり、 "によって実装された"呼び出しはありません、ウィンザーは実装者としてクラスを登録するほどスマートです。 – phoog

答えて

2

城ウィンザーの対応する呼び出しが(あります私がNInjectの複雑な機能を欠いていない限り)

MyClass mc = container.Resolve<MyClass>(); 

コメントで指摘したように、ウィンザーで働くには、自分自身に対してクラスを登録する必要があります。

+3

各クラスをそれ自体に対して登録する必要を避けるために、基底クラスに基づいて、複数のクラスをあるアセンブリに登録することができます。たとえば、次のコードを使用して、すべてのMVC Controller派生クラスを自己登録します。 'container.Register(Classes.FromThisAssembly()。BasedOn ().WithServiceSelf());' –

2

が、これは私がやっていたものである

container.Register(Component.For<MyClass>().ImplementedBy<MyClass>()); 

解決するには:

MyClass mc = container.Resolve<MyClass>(); 
+0

'.ImplementedBy ()'は必要ありません。あなたは '.For ()'を持つことができ、うまくいきます。 – gregsdennis

関連する問題