2011-12-19 13 views
0

HttpContextが利用できないときにCastle Windsorを使用してFakeHttpContextを登録したいと思います。誰でも私が次のAutofac登録をキャッスルウィンザーに翻訳するのを助けることができますか?城ウィンザーのオートファックアダプテーション

 builder.Register(c => HttpContext.Current != null ? 
      (new HttpContextWrapper(HttpContext.Current) as HttpContextBase) : 
      (new FakeHttpContext("~/") as HttpContextBase)) 
      .As<HttpContextBase>() 
      .InstancePerHttpRequest(); 
+0

を0 http://stackoverflow.com/questions/925244/specifying-instance-for-registration-of-a-component-with-castle-windsor – BlackICE

+0

ありがとうございますが、私はFakeContextだけをどのように追加できるのか分かりません実際のHttpContextが利用できない場合例えばサービスはHttpContextを必要とし、通常はそれを取得しますが、場合によってはサービスが呼び出され、使用可能なHttpContextがありません。このような場合にのみ、偽物を使用する必要があります。 – andre

答えて

3

あなたはウィンザーは、UsingFactoryMethodで1を指定することにより、特定のサービス解決するときにファクトリメソッドを使用することができます - あなたのケースでは、このようなものは、トリックを行う必要があります。

container.Register(
    Component.For<HttpContextBase>() 
     .UsingFactoryMethod(k => HttpContext.Current != null 
      ? (HttpContextBase)new HttpContextWrapper(HttpContext.Current) 
      : new FakeHttpContext("~/")) 
     .Lifestyle.PerWebRequest 
); 

注入するためには、現在のリクエスト、同様のアプローチは、次のとおりです。 `AddComponentInstance` を見てみましょう

container.Register(
    Component.For<HttpRequestBase>() 
     .UsingFactoryMethod(k => k.Resolve<HttpContextBase>().Request) 
     .Lifestyle.PerWebRequest 
); 
+0

次のエラーが表示されます。( 'System.Web.HttpContextWrapper'と 'Xinga.Core.Fakes.FakeHttpContext'の間に暗黙的な変換がないため、条件式の型を判別できません) – andre

+0

コードを次のように変更しました: container.Register(Component.For () .UsingFactoryMethod(K => HttpContext.Current = nullを 新しいHttpContextWrapper(HttpContext.Current) HttpContextBaseとして:!?HttpContextBaseとして新しいFakeHttpContext( "〜/"))) ; しかし、今、私は次のエラーを取得する: ことを指摘し – andre

+0

感謝{「?FactoryMethodActivator'1は後期バウンドSystem.Web.HttpContextBaseために誤って設定コンポーネントモデルを受け取ったあなたが 『UsingFactoryMethod』でこのコンポーネントを登録してください。」}私はファクトリメソッドからの戻り値の型について明示する必要がありました...コードサンプルをそれに応じて更新しました – mookid8000

関連する問題