6

I have a ASP.NET MVC4 web app, and I want some code to be executed the first time an app starts. The code basically loads a bunch of data from the database and stores it in a cache, so that any future requests can look up the data from the cache.

Where is the correct place to put this code? Should I simply add my line of code to Global.asax, or is there a best practice for calling code once an app starts?

4

3 回答 3

7

有一个单独的类来进行数据初始化并从Global.asax. Global.asax基本上应该充当协调器。DI 容器初始化、缓存初始化、路由初始化等单独的初始化应该位于它们自己的类中,从而遵守单一职责原则。

于 2013-04-23T15:22:14.427 回答
4
Global.asax.cs:Application_Start()

你在同一个地方做注册路线之类的事情。

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

于 2013-04-23T15:18:20.320 回答
2

您可以将代码放在Application_StartGlobal.asax 中。

或者您可以Lazy在静态成员上使用该类型,并且它只会在第一次调用时初始化(并且只要应用程序运行,它就会一直保留在内存中)。这样做的好处是不会不必要地减慢应用程序的启动速度。

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

public static Lazy<Regex> LibraryTagsRegex = 
    new Lazy<Regex>(() => new Regex(@"^library/tagged/(?<Tags>.+)", RegexOptions.Compiled));
于 2013-04-23T15:21:30.220 回答