在ServiceStack中给出以下服务类,
public class HelloWorldService: Service
{
public string Get(HelloWorldRequest request)
{
return someOtherClassInstance;
}
}
我如何访问someOtherClassInstance
?我对在特定状态下返回对象的最佳实践感到困惑?我理解它很容易从HelloWorldService中访问静态类对象但是其他保持状态的实例呢?我觉得非常难以相信最好的解决方案是IoC。有更好的方法吗?我怎样才能传入引用?有什么建议和想法吗?
非常感谢!
答案 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,因为它更容易测试,并且与所有其他依赖项的注册方式一致,我真的没有理由不这样做。