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,如何访问业务逻辑Pocos

你想太多了。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,因为它更易于测试,并且与所有其他依赖项的注册方式一致,而且我真的找不到不这样做的好理由。