MVCアプリケーション用のカスタムキャッシュプロバイダーを作成しました。このクラスを使用して、セッションデータを外部サービス(memcachedやRedisなど)に保存/取得します。
アプリケーションの起動時にオブジェクトインスタンスを1回作成して、任意のコントローラーからオブジェクトを参照できるようにします。インスタンスを「更新」する必要があるのは1回だけです。Global.asaxApplication_Startメソッドでクラスをインスタンス化することを考えていました。ただし、どのコントローラーでもインスタンスにアクセスできないようです。
MVCで(グローバル)クラスをインスタンス化してからアクセスするための推奨される方法は何ですか?
これが私の「簡略化された」クラスのコピーです:
public class PersistentSession : IPersistentSession
{
// prepare Dependency Injection
public ICache cacheProvider { get; set; }
public bool SetSessionValue(string key, string value)
{
return cacheProvider.PutToCache(key, value);
}
public bool SetSessionValue(string key, string value, TimeSpan expirationTimeSpan)
{
return cacheProvider.PutToCache(key, value, expirationTimeSpan);
}
public string FetchSessionValue(string key)
{
return cacheProvider.FetchFromCache(key);
}
}
アプリケーション全体のすべてのコントローラーからアクセスできるように、一度インスタンス化したいと思います。次のようになります。
// setup PersistentSession object
persistentSession = new PersistentSession();
string memcachedAddress = WebConfigurationManager.AppSettings["MemcachedAddress"].ToString();
string memcachedPort = WebConfigurationManager.AppSettings["MemcachedPort"].ToString();
persistentSession.cacheProvider = new CacheProcessor.Memcached(memcachedAddress, memcachedPort);
すべてのコントローラーからグローバルアクセスを取得するには、MVCのどこ/どのようにオブジェクトをインスタンス化する必要がありますか?