ServiceStack,如何访问业务逻辑Pocos
本文关键字:业务 Pocos 访问 何访问 ServiceStack | 更新日期: 2023-09-27 18:15:52
给定ServiceStack中的以下服务类,
public class HelloWorldService: Service
{
public string Get(HelloWorldRequest request)
{
return someOtherClassInstance;
}
}
我如何访问someOtherClassInstance
?我对在特定状态下返回对象的最佳实践是什么感到困惑?我理解它很容易从HelloWorldService内访问静态类对象,但如何保持状态的其他实例?我觉得很难相信最好的解决方案是国际奥委会。有更好的方法吗?我如何传递要使用的引用?有什么建议和想法吗?
非常感谢!
你想太多了。ServiceStack中的Service
只是一个普通的c#实例,它在每个请求时被初始化并填充。
默认情况下,内置的Funq将所有东西注册为单例,所以当你注册一个实例时,例如:
container.Register(new GlobalState());
并在你的Service中引用它:
public class HelloWorldService: Service
{
public GlobalState GlobalState { get; set; }
public string Get(HelloWorld request)
{
return GlobalState.SomeOtherClassInstance;
}
}
在后台它总是注入相同的实例,在Funq中这是非常快的,因为它实际上只是从内存中的Dictionary
中检索实例。
但是如果因为某种原因你不喜欢这种方法,那么作为服务仍然只是一个c#类,所以你可以使用静态属性:
public class HelloWorldService: Service
{
public static GlobalState GlobalState = new GlobalState { ... };
public string Get(HelloWorld request)
{
return GlobalState.SomeOtherClassInstance;
}
}
或Singleton:
public class HelloWorldService: Service
{
public string Get(HelloWorld request)
{
return GlobalState.Instance.SomeOtherClassInstance;
}
}
或者其他你想做的。我建议使用IOC,因为它更易于测试,并且与所有其他依赖项的注册方式一致,而且我真的找不到不这样做的好理由。