在控制器内部使用指令

Using directives inside controller

提问人:Yan 提问时间:2/21/2018 最后编辑:Stephen KennedyYan 更新时间:2/22/2018 访问量:74

问:

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

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

所以为了清楚起见,我说的是这个:

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;
C# asp.net ASP.NET-MVC 控制器 using-directives

评论

1赞 Evk 2/21/2018
你忘了解释你指的是哪 10+ 个 using 语句,以及为什么在所有控制器中重复它们。
1赞 NightOwl888 2/21/2018
也许你的意思是使用指令而不是使用语句
0赞 Yan 2/21/2018
NightOwl888,这确实是我的意思。很抱歉造成混乱,并会改变问题。

答:

2赞 programtreasures 2/21/2018 #1

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();
  }
}

评论

0赞 Yan 2/21/2018
对不起,我的意思是使用指令,而不是使用语句。我已经编辑了我的帖子。谢谢你的努力。