ASP.Net应用程序预热 - 公开集合

时间:2012-07-17 00:43:48

标签: c# asp.net .net-4.0 iis-7.5 asp.net-4.0

我的MVC应用程序当前使用Global.asaxApplication_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集合?

1 个答案:

答案 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>; }
     }
}