持久的多个请求的服务

时间:2012-12-13 18:07:12

标签: web-services servicestack

我原本以为每个请求都会重新创建一个特定的“服务接口”,并在我的示例中继承自ServiceStack.ServiceInterface.Service。我最近发现,也许并非如此,因为依赖关系(以及一般成员)保留了内部状态。我只是希望有人能指出我正确的方向,预期的行为以及为什么这样做。我主要对两种情况感兴趣,一种用于IIS托管,一种用于VS托管/调试。

1 个答案:

答案 0 :(得分:2)

ServiceStack中的服务已注册并自动装配,与任何其他IOC依赖项一样。每个请求都会创建一个新的服务实例,并使用其依赖项自动装配。

服务是否与现有实例一起自动装配取决于依赖关系的注册方式,例如,如果您使用built-in Funq IOC

默认情况下,依赖项是在Singleton范围内注册的,即每次都会注入相同的实例:

container.Register<IFoo>(c => new Foo());  
container.Register<IFoo>(c => new Foo()).ReusedWithin(ReuseScope.Container);  

您还可以指定RequestScope,以便为每个请求创建并注入新实例:

container.Register<IFoo>(c => new Foo()).ReusedWithin(ReuseScope.Request);  

最后是瞬态范围,每次创建并注入新实例:

container.Register<IFoo>(c => new Foo()).ReusedWithin(ReuseScope.None);  

确实为每个请求创建了一个新服务实例,但是否获得新实例取决于依赖项的注册范围:

public class MyService : Service { 
    public IFoo Foo { get; set; }  // auto-wired using above registration rules
}