是否应将JsonServiceClient的实例包装到using语句中?

时间:2014-09-02 19:12:27

标签: servicestack

将ServiceStack的JsonServiceClient包装在using语句中是最佳做法吗?

    var client = new JsonServiceClient();
    client.Post(request);

    using (var client = new JsonServiceClient())
    {
        client.Post(request);
    }

哪一个最好?

1 个答案:

答案 0 :(得分:3)

JsonServiceClient实施IDisposable,因此最佳做法是将其与using语句一起使用。

但是,在某些情况下,您需要跨多个请求共享JsonServiceClient的实例(例如,当您使用基于cookie的会话时,因为cookie包含在实例cookie容器中)< / em>,在这种情况下,您将使用没有using语句的客户端,但确保您的应用程序在客户端不再需要客户端时调用客户端的Dispose方法。

gdoron的

This answer进一步解释了有关实施IDisposable的类的最佳做法,例如JsonServiceClient及其背后的推理。

  

通常,当您使用IDisposable对象时,您应该在using语句中声明并实例化它。 using语句以正确的方式调用对象上的Dispose方法,并且(如前所示使用它时)一旦调用Dispose,它也会导致对象本身超出范围。在using块中,该对象是只读的,不能修改或重新分配。

     

using语句确保即使在对象上调用方法时发生异常,也会调用Dispose。您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果;实际上,这就是编译器如何翻译using语句。前面的代码示例在编译时扩展为以下代码(注意额外的花括号以创建对象的有限范围):

我希望有所帮助。