当前位置:  开发笔记 > 后端 > 正文

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

如何解决《如何使用ASP.NETMVC实现自定义缓存提供程序》经验,为你挑选了1个好方法。

我正在将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的自定义缓存提供程序,并告诉MonoRail使用我的缓存提供程序而不是默认缓存提供程序.模拟和单元测试我的控制器也很容易.

在ASP.NET MVC 1.0中,System.Web.Abstractions程序集(名称看起来很有希望)定义了HttpContextBase,如下所示:

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

我不明白这里使用的Cache属性是如何缓存提供者的抽象.它是传统的密封Cache类.似乎我不是唯一一个努力模仿框架中的类的人.

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



1> Mauricio Sch..:

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包含输出缓存提供程序抽象(AFAIK 不是通用缓存抽象,但仅用于输出缓存)


我不会尝试在HttpContext中注入它.相反,只需在控制器中注入抽象(ICache或其他任何调用).
@mausch,这正是我结束的事情.从第一篇文章中唯一不清楚的是如何使用IoC在HttpContext管道中注入缓存抽象,以便可以从任何地方访问它.
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有