2011-02-23 10 views
0

私はasp.MVCのIOCコンテナとしてStructureMapを使用するのが初めてです。私のコントローラの1つは、コンストラクタでIStreamServiceインターフェイスを受け取ります。これは簡単そうStructuremapを使用するコントローラが使用するサービスのコンストラクタにMVCコントローラのプロパティを挿入するには

For<IStreamService>().HttpContextScoped().Use<StreamService>(); 

ようStreamServiceの具象クラスの実装にリンクされている

私が直面してる問題は、具体的なクラスのconstuctorを注入する必要がIPrincipalパラメータを、かかることです。インスタンス化しているコントローラのUserプロパティをConcrete Serviceに渡したいと思います。誰かが正しい方向に私を指差してくれますか?

+0

本当にIPrincipalをコントローラからプルする必要がありますか?Robinが示唆しているように、HttpContextをプルするだけで簡単です。 –

+0

コメントありがとうございます。IPrincipalは、 HttpContectからアクセスすることができます。コントローラ。つまり、HttpContextからアクセスできない。それをする方法はありますか? – Mark

+0

これはどうすればできますか? MyControllerがStreamServiceに依存していると言っていますが、これはMyControllerに依存していますか? – Simon

答えて

3

問題ありません、ちょうどあなたの設定に次の行を追加します

For<IPrincipal>().Use(() => HttpContext.Current.User); 

ラムダの使用は、これは設定時に単一のインスタンスであることとは対照的に、依存性が要求されるたびに(評価されるようになります。

+0

こんにちは。あなたの提案をありがとう、HTTPContextまたはシングルトンなどからアクセス可能な他のアクセス可能なプロパティをアクセスするための方法だと思われるが、プロパティは、コントローラのインスタンスからのみアクセス可能だったと言う。つまり、私が作成したプロパティで、Serviceクラスをインスタンス化する際にプロパティを渡す必要があったとすれば、それは可能ですか? – Mark

+0

コントローラをインスタンス化するサービスが必要で、サービスをインスタンス化するコントローラーが必要な場合は、循環参照のように聞こえます。 –

+0

私は(あなたのデザインを変更する以外には、最も良いと思われる)唯一のことはそれらの両方が作成された後にプロパティインジェクションを使用してコントローラプロパティをサービスに注入することができます。ドキュメントを参照してください:http://structuremap.net/structuremap/ConstructorAndSetterInjection.htm#section8 –

関連する問題