2011-07-04 18 views
1

現在のコンテキストを表す静的プロパティ(MyService.Context)を持っています(現在ログインしているユーザー固有のもので、変更されています)。私はStructureMapでのデフォルトインスタンスの登録

ObjectFactory.Initialize(x => 
      { 
       x.For<IMyService>().Use<MyInstance>(c => c.Use(MyService.Context)); 
      }); 

すなわち達成しようとしている何

すべてのObjectFactory.GetInstance<IMyService>()のために私はMyService.Context

への参照を取得するようになんとかということですか?私は(のHttpContextを介して)要求を行うユーザに応じMyService.Context変化するため、シングルトンパターンを使用することができない

UPDATE

。 iは、各リクエストのカスタム結果を返すことができるように、ラムダパラメータc上記擬似コードで

は、SMコンテキストを表します。私は、SMのIntercept()の承知しているが、それは、オブジェクトが構築される後解雇だ - ない代わりを。

+0

(Webアプリケーションのように)、同時にアプリケーションを使用して複数のユーザーがいますか?その場合は、静的プロパティを使用してユーザー固有の情報を保持することはできません。 –

答えて

3

あなたはOnCreationメソッドを追加する可能性があるプロパティを使用して作業することができます。

ObjectFactory.Initialize(x => 
     { 
      x.For<IMyService>() 
      .Use<MyInstance>() 
      .OnCreation(x => x.Context = MyService.Context; 
     }); 

それとも、遅延初期化を使用して、新しいインスタンスが必要とされるたびに実行されるUse方法にFuncを提供することができます提供アクションはちょうど作成後にインスタンスに対して実行されます。これは適切なコンテキストで実行する必要があります。

ObjectFactory.Initialize(x => 
     { 
      x.For<IMyService>() 
      .Use<MyInstance>(() => new MyInstance(MyService.Context); 
     }); 

この方法のいずれかがうまくいければ幸いです。

For<IContext>().Add(c => MyService.Context).Named("context"); 
For<IMyService>().Use<MyService>() 
    .Ctor<IContext>().Is(c => c.GetInstance<IContext>("context")); 

またはあなたがすべてのdependeesのためのコンテキストをデフォルトにしたい場合:

For<IContext>().Use(() => MyService.Context); 
For<IMyService>().Use<MyService>(); 

ラムダ式ますどちらの場合も原因にMyServiceでは、Iコンテキストのためのctorの引数を持っていることを提供

+1

お返事ありがとうございます。私はそれを十分にはっきりさせず、コードは私が何をしたいのかを実証していないことに気付きました。私は質問を更新しました。 – Muxa

+0

私は自分の答えを編集しました。 – Zebi

+0

おかげで、私は完全に働いたx.For ().USE (()=> MyService.Context)を、使用していました。 – Muxa

0

MyServiceインスタンスを要求する際に解決されるコンテキスト

関連する問題