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 });

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

于 2014-02-04T10:52:25.587 回答
0

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

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

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 回答