在ASP.NETMVC应用程序中,在何处放置初始化代码?

在ASP.NETMVC应用程序中,在何处放置初始化代码?,asp.net,.net,Asp.net,.net,我有一个ASP.NET MVC4 web应用程序,我希望在应用程序第一次启动时执行一些代码。代码基本上从数据库加载一组数据并将其存储在缓存中,以便将来的任何请求都可以从缓存中查找数据 该代码的正确位置在哪里?我应该简单地将我的代码行添加到Global.asax,还是有一个在应用程序启动后调用代码的最佳实践 Global.asax.cs:Application_Start() 在同一个地方,你可以做一些事情,比如注册路线 这正是我初始化缓存的地方。我还检查了每个应用程序的缓存过期时间,\u Be

我有一个ASP.NET MVC4 web应用程序,我希望在应用程序第一次启动时执行一些代码。代码基本上从数据库加载一组数据并将其存储在缓存中,以便将来的任何请求都可以从缓存中查找数据

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

Global.asax.cs:Application_Start()
在同一个地方,你可以做一些事情,比如注册路线


这正是我初始化缓存的地方。我还检查了每个应用程序的缓存过期时间,\u BeginRequest(),以查看是否需要更新它。

您可以将代码放在Global.asax的
应用程序\u Start

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

例如,此示例适用于已编译的正则表达式,但也可以通过加载数据来完成:

public static Lazy<Regex> LibraryTagsRegex = 
    new Lazy<Regex>(() => new Regex(@"^library/tagged/(?<Tags>.+)", RegexOptions.Compiled));
publicstaticlazylibrarytagsregex=
新的Lazy(()=>newregex(@“^library/taged/(?。+)”,RegexOptions.Compiled));

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