【问题标题】:Should an instance of a JsonServiceClient be wrapped into a using statement?是否应该将 JsonServiceClient 的实例包装到 using 语句中?
【发布时间】:2014-10-27 03:31:22
【问题描述】:

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

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

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

哪个是最好的?

【问题讨论】:

    标签: servicestack


    【解决方案1】:

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

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

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

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

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多