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