我的MVC应用程序当前使用Global.asax
,Application_Start
方法加载大量数据,然后将其作为集合公开。例如:
// Global.asax
public static DataRepository Repository { get; set; }
protected void Application_Start()
{
// All the normal stuff...
// Preload this repository.
DataRepository = new DataRepository();
}
// HomeController.cs Example
public ActionResult Index(){
return Json(MyApplication.Repository.GetSomeCollection(),
JsonRequestBehavior.AllowGet);
}
我想使用ASP.Net 4.0 + IIS 7.5 Application Preload功能,但需要将存储库公开给应用程序的其余部分。类似的东西:
// pseudo code attempt at goal
public class ApplicationPreload : IProcessHostPreloadClient
{
public MyRepositoryClass Repository { get; set; }
public void Preload(string[] parameters)
{
// repository class's constructor talks to DB and does other crap.
Repository = new MyRepositoryClass();
}
}
如何使用IEnumerable<T>
实现的Preload()
方法公开存储库类甚至简单的IProcessHostPreloadClient
集合?
答案 0 :(得分:3)
如果您的目标只是将IEnumerable<T>
尝试从HttpRuntime.Cache
的实施中填入IProcessHostPreloadClient
。然后,您可以选择从Global.asax
应用程序类公开集合。
类似的东西:
public class ApplicationPreload : IProcessHostPreloadClient
{
public void Preload(string[] parameters)
{
var repository = new MyRepositoryClass();
HttpRuntime.Cache.Insert(
"CollectionName",
repository.GetCollection(),
Cache.NoAbsoluteExpiration,
Cache.NoSlidingExpiration,
CacheItemPriority.NotRemovable,
null);
}
}
public class MvcApplication : HttpApplication
{
public IEnumerable<CollectionItem> CollectionName
{
get { return HttpRuntime.Cache["CollectionName"] as IEnumerable<CollectionItem>; }
}
}