默认情况下ServiceStack服务是单例可能导致其请求上下文被破坏?

时间:2014-06-30 01:24:18

标签: servicestack

我的ServiceStack实现具有依赖于HTTP cookie /请求的服务实现。让我们假设以下情况。

在第一个经过身份验证的用户请求中,ServiceStack AppHost能够解析服务,使用用户的RequestContext(请求,响应,cookie等)注入服务,然后关闭。让我们假设这个请求实际上需要一段时间来处理。

请注意,默认情况下(from the ServiceStack documentation)服务实例实际上来自单身。

  

默认情况下,Funq中注册的所有依赖项都具有单例作用域,其中相同的实例将注入所有依赖项。

当第一个用户请求尚未完成执行时,现在考虑另一个不同用户的单独请求。 AppHost再次解析服务实例,并注入第二个用户的RequestContext。我们还假设此请求需要一段时间才能处理。

如果到现在为止第一个用户线程重新获得控制权并且必须从服务实例中读取它的RequestContext - 它现在是否会因第二个请求而被破坏?

可以理解我可以将服务实例配置为请求生命周期,但是假设通过上面的场景我可能很容易遇到请求上下文损坏,这是正确的吗?

1 个答案:

答案 0 :(得分:1)

您的问题中的引用与手动注册的依赖项有关,默认情况下是单例,除非您另行指定。 Auto-wired services已在容器中注册为ReuseScope.None

如果您手动注册服务,则应该使用IAppHost.RegisterService(Type serviceType, params string[] atRestPaths),并将服务注册为ReuseScope.None