我最初认为每个请求都会重新创建一个特定的“服务接口”,在我的示例中,它继承自 ServiceStack.ServiceInterface.Service。我最近发现可能并非如此,因为依赖项(和一般成员)保留了内部状态。我只是希望是否有人可以为我指出预期行为的正确方向以及它为什么会这样。我主要对两种情况感兴趣,一种用于 IIS 托管,一种用于 VS 托管/调试。
问问题
702 次
1 回答
2
ServiceStack中的服务像任何其他 IOC 依赖项一样被注册和自动装配。每个请求都会创建一个新的 Service 实例并与其依赖项自动装配。
服务是否与现有实例自动连接取决于依赖项的注册方式,例如,如果您使用内置的 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
}
于 2012-12-13T18:42:03.847 回答