1

私の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

4

1 に答える 1

3

公開することだけを目的としている場合は、の実装からIEnumerable<T>それを詰め込んでみてください。その後、オプションで、アプリケーションクラスからコレクションを公開できます。HttpRuntime.CacheIProcessHostPreloadClientGlobal.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 に答える