加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 23:42:50 所属栏目:asp.Net 来源:网络整理
导读:我正在将 MonoRail应用程序迁移到 ASP.NET MVC 1.0.在我的原始应用程序中,我写了一个自定义缓存提供程序(使用 memcached的分布式缓存提供程序).在MonoRail中,这个任务非常简单,因为框架使用了界面,并且有这样的 ICacheProvider: public interface ICachePro
我正在将 MonoRail应用程序迁移到 ASP.NET MVC 1.0.在我的原始应用程序中,我写了一个自定义缓存提供程序(使用 memcached的分布式缓存提供程序).在MonoRail中,这个任务非常简单,因为框架使用了界面,并且有这样的 ICacheProvider:
public interface ICacheProvider : IProvider,IMRServiceEnabled
{
    void Delete(string key);
    object Get(string key);
    bool HasKey(string key);
    void Store(string key,object data);
}

每个控制器动作都可以使用此接口的实例.所以,我只需要实现一个使用memcached和tell的自定义缓存提供程序
MonoRail使用我的缓存提供程序,而不是默认缓存.对我的控制器进行模拟和单元测试也很容易.

在ASP.NET MVC 1.0中,有一个定义HttpContextBase的System.Web.Abstractions程序集(名称看起来很有前途):

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

我不明白这里使用的Cache属性是缓存提供程序的抽象.这是传统密封的Cache课程.看来,我不是struggling to mock在框架中唯一的课.

我对ASP.NET MVC框架非常新,我必须在这里遗漏一些东西.我可以编写一个CustomBaseController,它使用我定义的ICacheProvider接口
所有的控制器都是从这个基类派生的,但是如果有一个更优雅的(ASP.NET MVCish)解决方案,我很乐意实现它.我注意到HttpContextBase实现了IServiceProvider.GetService方法将在哪里寻找服务?这可以容易地嘲笑吗?

解决方法

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

> 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不是一般的缓存抽象,而只是用于输出缓存)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读