在控制器内使用指令

时间:2018-02-21 07:32:13

标签: c# asp.net asp.net-mvc controller using-directives

如何避免在我的所有控制器中重复使用10+指令?

每个控制器中还有大约10多个使用指令,因为它们引用了我们公司使用的核心框架功能。我知道你会说逻辑应该分开,所以我不再需要它们了,但这不是一个选择。

所以要明确,我在谈论这个:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using System.Web.Mvc;
using AutoMapper.QueryableExtensions;
using Kendo.Mvc.UI;

1 个答案:

答案 0 :(得分:2)

using语句确保即使在对象上调用方法时发生异常,也会调用Dispose。 您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果;实际上,这就是编译器如何翻译using语句。

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}

由编译器翻译

{
  Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet; 
  }
  finally
  {
    if (font1 != null)
      ((IDisposable)font1).Dispose();
  }
}

因此,在您的情况下,您可以在单个块中添加添加对象初始化并将所有内容置于finally块中,请参阅下面的示例,

{
  Font font1 = new Font("Arial", 10.0f);
 Font font2 = new Font("Arial", 10.0f);
 Font font3 = new Font("Arial", 10.0f);
 Font font4 = new Font("Arial", 10.0f);
 Font font5 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet; 
  }
  finally
  {

      ((IDisposable)font1).Dispose();

      ((IDisposable)font2).Dispose();

      ((IDisposable)font3).Dispose();

      ((IDisposable)font4).Dispose();

      ((IDisposable)font5).Dispose();
  }
}