将初始化代码放在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));