2012-12-13 75 views
3

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

回答

2

ServiceStack中的服务已注册并自动装配,与其他IOC依赖项相同。每个请求都会创建一个服务的新实例并自动装配它的依赖关系。

是否将服务自动装配与现有的情况下,或不依赖于依赖是如何注册,例如,如果你使用built-in Funq IOC

默认情况下,依赖由辛格尔顿范围登记,也就是说,它会注入相同的实例,每次:

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 
}