gpt4 book ai didi

c# - ServiceStack,如何接入业务逻辑Pocos?

转载 作者:可可西里 更新时间:2023-11-01 16:18:33 24 4
gpt4 key购买 nike

给定 ServiceStack 中的以下服务类,

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

我如何访问 someOtherClassInstance?我对返回特定状态的对象的最佳做法感到困惑?我知道从 HelloWorldService 中访问静态类对象很容易,但是其他保持状态的实例呢?我很难相信最好的解决方案是 IoC。有什么更好的方法吗?如何传递要使用的引用?有什么建议和想法吗?

非常感谢!

最佳答案

你想多了。 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;
}
}

在幕后它总是注入(inject)相同的实例,在 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,因为它更易于测试并且与所有其他依赖项的注册方式一致,而且我真的没有理由不这样做。

关于c# - ServiceStack,如何接入业务逻辑Pocos?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16787047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com