C# 在何处管理大多数控制器操作方法中使用的常规void方法
我有以下方法,它接受ID数组并填充视图数据参数,如下所示:-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.
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
)
- 这种方法的一个优点是,因为您是通过接口注入的,所以您可以轻松处理某些控制器可能需要稍微不同的功能的情况-在这种情况下,您只需创建一个新的实现(例如,
)并修改DI设置,以便在特定控制器等需要时分发该类的实例SpecialCaseViewDataPopulator
现在,所有控制器的操作方法都可以使用
\u populator.populateViewData
,而不必知道它是否是BasicViewDataPopulator
,SpecialCasViewDataPopulator
,等等。方法代码可以拉入构造函数中。。在这种情况下,私有void方法的用法是什么。。