如何在Funq中注入HttpRequestBase和HttpContextBase(使用ServiceStack时)

时间:2014-02-04 09:31:27

标签: servicestack funq

我很高兴使用AutoFaq几年,并利用它在MVC管道中轻松注入HttpRequestBase和HttpContextBase的能力。这使得模拟和解耦变得更加容易。

我正在将我的数据层更改为ServiceStack,并且作为将默认Funq DI机制连接到我的不同层的一部分,我无法弄清楚如何注入HttpRequestBase和HttpContextBase。

有办法做到这一点吗?我在AppHost.Configure(Func.Container容器)中寻找container.Register()模拟。

由于

2 个答案:

答案 0 :(得分:2)

ServiceStack不允许向其IOC注册运行时依赖项,尽管ServiceStack Services和Request pipeline仅绑定到IRequest接口,这可以直接在服务上注入模拟的IRequest何时需要,例如:

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

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

Testing wiki显示了测试ServiceStack服务的其他方法。

答案 1 :(得分:0)

ServiceStack拥有自己的HttpContext和Request / Response抽象。在v3.x中,这些是IRequestContext,IHttpRequest,IHttpResponse。这是独立于ASP.NET的实现(consoleMono)。建议您使用抽象而不是尝试使用底层的ASP.NET对象。

在您的服务代码中,您可以通过以下方式访问它们:

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

如果你真的需要真正的ASP.NET HttpContext,apparently you should be able to access it at IRequest.OriginalRequest。但是,如果你正在尝试ServiceStack方式,“不要这样做”。

有关v3中Funq用法的更多解释如下: https://github.com/ServiceStackV3/ServiceStackV3/wiki/The-IoC-container