将初始化代码放在ASP.Net MVC应用程序中的位置?

问题描述:

我有一个ASP.NET MVC4网络应用程序,我想要一些代码在应用程序第一次启动时执行。代码基本上从数据库加载一堆数据并将其存储在缓存中,以便将来的任何请求都可以从缓存中查找数据。将初始化代码放在ASP.Net MVC应用程序中的位置?

这个代码的正确位置在哪里?我应该简单地将我的代码行添加到Global.asax中,还是在应用程序启动后调用代码的最佳做法?

有一个单独的类来进行数据初始化,并从Global.asax调用相应的方法。 Global.asax应该基本上作为一个管弦乐队。个人初始化如DI容器初始化,缓存初始化,路由初始化等都应该在他们自己的类中进行,从而履行单一责任原则。

Global.asax.cs:Application_Start() 

同样的地方,你做注册路线的事情。

这正是我初始化缓存的地方。我还检查每个Application_BeginRequest()上的缓存过期时间,看它是否需要更新。

您可以将代码放在Global.asax中的Application_Start

或者你可以在静态成员上使用Lazy类型,它只会在第一次调用时才初始化(并且只要应用程序运行,它就会保留在内存中)。这具有不会不必要地减缓应用启动的优点。

例如,这个例子是一个正则表达式编译,但也可以用数据加载完成:

public static Lazy<Regex> LibraryTagsRegex = 
    new Lazy<Regex>(() => new Regex(@"^library/tagged/(?<Tags>.+)", RegexOptions.Compiled));