ServiceStack,如何访问Pocos的业务逻辑?

时间:2013-05-28 08:13:01

标签: c# http rest inversion-of-control servicestack

在ServiceStack中给出以下服务类,

public class HelloWorldService: Service
{
    public string Get(HelloWorldRequest request)
    {
        return someOtherClassInstance;
    }
}

我如何访问someOtherClassInstance?我对在特定状态下返回对象的最佳实践感到困惑?我理解它很容易从HelloWorldService中访问静态类对象但是其他保持状态的实例呢?我觉得非常难以相信最好的解决方案是IoC。有更好的方法吗?我怎样才能传入引用?有什么建议和想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

你在想这个。 ServiceStack中的Service只是一个普通的C#实例,它会在每次请求时启动并填充。

默认情况下,内置的Funq将所有内容都注册为单例,因此当您注册实例时,例如:

container.Register(new GlobalState());

并在您的服务中引用它:

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;
    }
}

或单身人士:

public class HelloWorldService: Service
{
    public string Get(HelloWorld request)
    {
        return GlobalState.Instance.SomeOtherClassInstance;
    }
}

或者你想做的其他事情。我建议使用IOC,因为它更容易测试,并且与所有其他依赖项的注册方式一致,我真的没有理由不这样做。