你想多了。ServiceStack 中的AService
只是一个普通的 C# 实例,它会在每个请求时启动和填充。
默认情况下,内置 Funq 将所有内容注册为单例,因此当您注册实例时,例如:
container.Register(new GlobalState());
并在您的服务中引用它:
public class HelloWorldService: Service
{
public GlobalState GlobalState { get; set; }
public string Get(HelloWorld request)
{
return GlobalState.SomeOtherClassInstance;
}
}
在幕后它总是注入同一个实例,在 Funq 中这非常快,因为它实际上只是从 in-memory 中检索实例Dictionary
。
但是,如果出于某种原因您不喜欢这种方法,而不是作为服务仍然只是一个 C# 类,那么您可以使用静态属性:
public class HelloWorldService: Service
{
public static GlobalState GlobalState = new GlobalState { ... };
public string Get(HelloWorld request)
{
return GlobalState.SomeOtherClassInstance;
}
}
或单例:
public class HelloWorldService: Service
{
public string Get(HelloWorld request)
{
return GlobalState.Instance.SomeOtherClassInstance;
}
}
或者你想这样做。我建议使用 IOC,因为它更具可测试性,并且与所有其他依赖项的注册方式一致,而且我真的没有理由不这样做。