我很高兴使用AutoFaq几年,并利用它在MVC管道中轻松注入HttpRequestBase和HttpContextBase的能力。这使得模拟和解耦变得更加容易。
我正在将我的数据层更改为ServiceStack,并且作为将默认Funq DI机制连接到我的不同层的一部分,我无法弄清楚如何注入HttpRequestBase和HttpContextBase。
有办法做到这一点吗?我在AppHost.Configure(Func.Container容器)中寻找container.Register()模拟。
由于
答案 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的实现(console或Mono)。建议您使用抽象而不是尝试使用底层的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