2009-05-16 7 views
15

MonoRailアプリケーションをASP.NET MVC 1.0に移行しています。私の元のアプリケーションでは、カスタムキャッシュプロバイダ(memcachedを使用する分散キャッシュプロバイダ)を作成しました。モノレールにフレームワークは、インターフェイスを使用するので、この作業は非常に簡単であり、ICacheProviderは次のように見えることがある。ASP.NET MVCでカスタムキャッシュプロバイダを実装する方法

public interface ICacheProvider : IProvider, IMRServiceEnabled 
{ 
    void Delete(string key); 
    object Get(string key); 
    bool HasKey(string key); 
    void Store(string key, object data); 
} 

このインタフェースのインスタンスは、すべてのコントローラのアクションで利用可能です。だから、私がしなければならなかったのは、memcachedを使用し、 MonoRailにデフォルトのキャッシュプロバイダの代わりにキャッシュプロバイダを使用するよう指示するカスタムキャッシュプロバイダを実装することでした。私のコントローラを模擬して単体テストすることもとても簡単でした。

public abstract class HttpContextBase : IServiceProvider 
{ 
    ... 
    public virtual System.Web.Caching.Cache Cache { get; } 
    ... 
} 

私はここで使用するキャッシュのプロパティがどのように理解していない:ASP.NET MVC 1.0で

このような HttpContextBaseを定義System.Web.Abstractionsアセンブリ(名前は有望に見えるが)ありますキャッシュプロバイダの抽象化。封印された遺産は Cacheです。私はフレームワーク内のクラスの中で唯一のものではないようです。 struggling to mock

私はASP.NET MVCフレームワークには非常に新しいので、ここで何かが欠落しているはずです。私は定義したICacheProviderインターフェイスを使用するCustomBaseControllerを書くことができ、 すべてのコントローラはこの基本クラスから派生していますが、もっとエレガントな(ASP.NET MVCish)ソリューションがあれば実装することができて嬉しいです。私は、HttpContextBaseがIServiceProviderを実装していることに気づいた。 GetServiceメソッドはサービスを探す場所はどこですか?これは簡単に嘲笑できますか?

答えて

18

キャッシュが公式抽象化またはプロバイダを持っていますが、あなたは簡単に1を構築することができません。

ASP.NET 4.0がoutput cache provider abstraction(私の知る限りないが含まれて一般的なキャッシュ抽象化のみですが、出力キャッシュの場合)

+3

@mausch、これはまさに私がやったことです。最初の投稿からはっきりしない唯一のことは、IoCを使用してHttpContextパイプラインにキャッシュ抽象化を挿入する方法です。これにより、どこからでもアクセスできるようになります。 –

+4

私はそれをHttpContextに注入しようとしません。代わりに、コントローラに抽象化(ICacheまたはそれが呼び出されているもの)を挿入するだけです。 –

2

この回答は古いです。 ASP.NET 4.0: Writing custom output cache providersを参照してください。

+2

古くはありません。 *出力キャッシュ*がプラグ可能になりました(2010年の回答に追加しました)が、一般キャッシュではありません。 –

関連する問題