ASP.Net应用程序热身 - 揭露收藏(ASP.Net Application Warmup -

2019-10-17 00:48发布

我的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的应用程序预加载功能,但需要的库暴露给应用程序的其余部分。 就像是:

// 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

Answer 1:

如果你只是瞄准以露出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>; }
     }
}


文章来源: ASP.Net Application Warmup - Exposing Collections