当应用程序启动/开始时,我想执行初始化任务,例如从数据库获取组数据。我已经在控制器初始化方法中的一个控制器中完成了这个:
SqlActions sa = new SqlActions();
DataTable dt = sa.ExeSP("getdata");
//using the datatable I then fill IEnumerable lists for my controller actions.
我的问题是:我有七个控制器,我不想复制上述7次,因为整个控制器的数据是相同的。我在哪里可以放置上面的代码然后可供所有控制器使用???
答案 0 :(得分:0)
考虑使用WebActivator:
https://www.nuget.org/packages/WebActivator/
WebActivator是一个NuGet包,可以轻松地使用其他包 将启动和关闭代码引入Web应用程序。这给了 一个更清洁的解决方案,而不是用。修改global.asax 来自许多软件包的启动逻辑。
用法:
using System;
[assembly: WebActivatorEx.PreApplicationStartMethod(
typeof(MyNamespace.MyInitializator), "PreStart")]
namespace MyNamespace {
public static class MyInitializator {
public static void PreStart() {
// Add your start logic here
}
}
}
您可以使用数据填充公共静态缓存,并在所有控制器中使用它。
答案 1 :(得分:0)
如果您没有分发必须在其放入的任何项目中运行自己的初始化的组件,请保持简单并使用Application_Start。查看当前的global.asax以及它如何调用App_Start文件夹中的类的方法。这种方式比IMHO更清晰,并且与项目中其他启动代码的当前约定保持一致。