1

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

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

4

1 回答 1

3

如果您只是想公开IEnumerable<T>尝试将其HttpRuntime.CacheIProcessHostPreloadClient. 然后,您可以选择从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>; }
     }
}
于 2012-07-17T04:15:32.423 回答