3

在我的 ASP.NET MVC 控制器中,我想调用基于 servicestack 的服务(不在 MVC 站点中托管)。为了使代码可测试,我想将此服务客户端注入到控制器构造函数中。

假设我有自己的继承自 JsonServiceClient 的类,我可以为所有 MVC 调用使用该服务客户端的单例吗?这意味着客户端必须是线程安全的。

(Autofac)注册可以是单例:

builder.RegisterType<SomeServiceClient>().SingleInstance();

或者它必须是每个 http 请求:

builder.RegisterType<SomeServiceClient>().InstancePerHttpRequest();

发现了一篇博客文章,其中另一个 servicestack 用户似乎使用了单例,但我不确定: 显示示例的博客文章

4

1 回答 1

1

每个请求通常都是可重入的,因此它主要是 ThreadSafe 用作 Singleton,需要注意的是它共享相同的 CookieContainer,而 ServiceClients 不会改变 CookieContainer 集合本身,底层的 WebRequest 会并且不知道 WebRequest 是否围绕它同步访问——尽管我个人从未见过它们有任何问题。

您可以通过以下方式禁用正在使用的 Cookie(即,如果您的客户端不需要会话):

client.StoreCookies = false;
于 2013-10-10T05:43:14.367 回答