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メソッドはサービスを探す場所はどこですか?これは簡単に嘲笑できますか?
@mausch、これはまさに私がやったことです。最初の投稿からはっきりしない唯一のことは、IoCを使用してHttpContextパイプラインにキャッシュ抽象化を挿入する方法です。これにより、どこからでもアクセスできるようになります。 –
私はそれをHttpContextに注入しようとしません。代わりに、コントローラに抽象化(ICacheまたはそれが呼び出されているもの)を挿入するだけです。 –