gpt4 book ai didi

asp.net-mvc - 如何使用 ASP.NET MVC 实现自定义缓存提供程序

转载 作者:行者123 更新时间:2023-12-03 07:34:18 24 4
gpt4 key购买 nike

我正在迁移 MonoRail申请ASP.NET MVC 1.0 .在我的原始应用程序中,我编写了一个自定义缓存提供程序(使用 memcached 的分布式缓存提供程序)。在 MonoRail 中,这项任务非常简单,因为框架使用接口(interface)并且有 ICacheProvider看起来像这样:

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

这个接口(interface)的一个实例在每个 Controller Action 中都可用。所以,我所要做的就是实现一个使用 memcached 的自定义缓存提供程序并告诉
MonoRail 使用我的缓存提供程序而不是默认的。模拟和单元测试我的 Controller 也很容易。

在 ASP.NET MVC 1.0 中有定义 HttpContextBase 的 System.Web.Abstractions 程序集(名称看起来很有前途)。像这样:
public abstract class HttpContextBase : IServiceProvider
{
...
public virtual System.Web.Caching.Cache Cache { get; }
...
}

我不明白这里使用的 Cache 属性如何是缓存提供程序的抽象。这是遗留的密封 Cache类(class)。看来我不是唯一的 struggling to mock出框架中的类。

我对 ASP.NET MVC 框架非常陌生,我一定在这里遗漏了一些东西。我可以编写一个使用我定义的 ICacheProvider 接口(interface)的 CustomBaseController 和
我所有的 Controller 都派生自这个基类,但如果有更优雅的(ASP.NET MVCish)解决方案,我会很乐意实现它。我注意到 HttpContextBase 实现了 IServiceProvider . GetService 在哪里方法去寻找服务?这很容易被 mock 吗?

最佳答案

Cache 没有官方的抽象或提供者,但您可以轻松构建一个:

  • http://weblogs.asp.net/zowens/archive/2008/08/04/cache-abstraction.aspx
  • http://memcachedproviders.codeplex.com/SourceControl/changeset/view/15983#58762

  • ASP.NET 4.0 包含一个 output cache provider abstraction (AFAIK 不是一般的缓存抽象,但仅用于输出缓存)

    关于asp.net-mvc - 如何使用 ASP.NET MVC 实现自定义缓存提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/873355/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com