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