C# 在何处管理大多数控制器操作方法中使用的常规void方法

C# 在何处管理大多数控制器操作方法中使用的常规void方法,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有以下方法,它接受ID数组并填充视图数据参数,如下所示:- private void populateViewData(long[] it360ids) { var resources = repository.GetResources(it360ids); foreach (var resource in resources) { string c = resource.

我有以下方法,它接受ID数组并填充视图数据参数,如下所示:-

 private void populateViewData(long[] it360ids)
        {
            var resources = repository.GetResources(it360ids);
            foreach (var resource in resources)
            {
                string c = resource.RESOURCENAME;
                long id = resource.RESOURCEID;

                ViewData["NAME" + resource.RESOURCEID.ToString()] = resource.RESOURCENAME;
                ViewData["CustomerNAME" + resource.RESOURCEID.ToString()] = resource.ResourceLocation.SiteDefinition.AccountDefinition.ORG_NAME;

        }
我在大多数控制器类中都使用了这个方法,目前我正在每个控制器类的末尾添加这个方法。但我的问题是如何在一个地方定义这个方法,并从关联的操作方法中引用它?
谢谢

您可以创建自己的ControllerBase:

public class MyController : Controller
{
    protected void populateViewData(long[] it360ids) { ... }
}
之后,您必须在所有现有控制器中使用
MyController

public class HomeController : MyController { ... }

希望有帮助

基类是一个很好的选择,另一种方法是通过依赖注入

创建一个界面

public interface IViewDataPopulator
{
    void populateViewData(long[] it360ids,ViewDataDictionary ViewData);
}
至少创建一个实现

public class BasicViewDataPopulator:IViewDataPopulator
{
  public void populateViewData(long[] it360ids,ViewDataDictionary ViewData)
  { 
     //code goes here
  }
}
声明控制器构造函数上的Depdency

public class MyController
{
   readonly IViewDataPopulator _populator;
   public MyController(IViewDataPopulator populator)
   {
      if (populator==null) throw new ArgumentNullException("populator"); //etc, etc
      //store it...
      _populator=populator;
   }
}
将其连接起来

在MVC项目中设置一个IoC框架(Ninject、Unity等),以处理实际注入,从而对于给定接口(
IViewDataPopulator
)请求,它将分发给定的实现(例如
BasicViewDataPopulator

  • 这种方法的一个优点是,因为您是通过接口注入的,所以您可以轻松处理某些控制器可能需要稍微不同的功能的情况-在这种情况下,您只需创建一个新的实现(例如,
    SpecialCaseViewDataPopulator
    )并修改DI设置,以便在特定控制器等需要时分发该类的实例
终于


现在,所有控制器的操作方法都可以使用
\u populator.populateViewData
,而不必知道它是否是
BasicViewDataPopulator
SpecialCasViewDataPopulator
,等等。

方法代码可以拉入构造函数中。。在这种情况下,私有void方法的用法是什么。。