【问题标题】:How to inject HttpRequestBase and HttpContextBase in Funq (while using ServiceStack)如何在 Funq 中注入 HttpRequestBase 和 HttpContextBase(使用 ServiceStack 时)
【发布时间】:2014-02-04 09:31:26
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: servicestack funq


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 2014-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多