0

私は数年間 AutoFaq を喜んで使用しており、MVC パイプラインに HttpRequestBase と HttpContextBase を簡単に挿入できるその機能を利用しています。これにより、モッキングとデカップリングが非常に簡単になります。

データレイヤーを ServiceStack に変更中です。デフォルトの Funq DI メカニズムをさまざまなレイヤーに配線する一環として、HttpRequestBase と HttpContextBase を注入する方法がわかりません。

これを行う方法はありますか?AppHost.Configure(Func.Container コンテナー) 内の container.Register() アナログを探しています。

ありがとう

4

2 に答える 2

2

ServiceStack では、ランタイム依存関係を IOC に登録することはできませんが、ServiceStack サービスとリクエスト パイプラインはIRequestインターフェイスにのみバインドされ、必要に応じてモックされたIRequestをサービスに直接注入できます。たとえば、次のようになります。

var service = new MyService {
    Request = new MockHttpRequest()
};

var response = service.Get(new MyRequest { Id = 1 });

Testing wikiには、ServiceStack サービスをテストする他の方法が示されています。

于 2014-02-04T10:52:25.587 に答える
0

ServiceStack には、HttpContext と Request/Response の独自の抽象化があります。v3.x では、これらは IRequestContext、IHttpRequest、IHttpResponse です。これは、ASP.NET ( consoleまたはMono ) の実装に依存しません。基礎となる ASP.NET オブジェクトを使用する代わりに、抽象化を使用することをお勧めします。

Service コードでは、次の方法でアクセスできます。

var httpReq = base.RequestContext.Get<IHttpRequest>();
var httpResp = base.RequestContext.Get<IHttpResponse>();

実際の ASP.NET HttpContext が本当に必要な場合は、明らかに IRequest.OriginalRequest でアクセスできるはずです。ただし、ServiceStack の方法で試している場合は、「そうしないでください」。

v3 での Funq の使用方法の詳細については、 https ://github.com/ServiceStackV3/ServiceStackV3/wiki/The-IoC-container をご覧ください。

于 2014-02-04T11:00:36.117 に答える