我正在迁移
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中,有一个System.Web.Abstractions程序集(名称看起来很有希望)定义了
HttpContextBase
这样地:
public abstract class HttpContextBase : IServiceProvider
{
...
public virtual System.Web.Caching.Cache Cache { get; }
...
}
我不理解这里使用的缓存属性是如何抽象缓存提供程序的。它是密封的遗产
Cache
班级。看来我不是唯一一个
struggling to mock
框架中的类。
我对ASP.NET MVC框架非常陌生,这里一定缺少一些东西。我可以编写一个使用我定义的icacheprovider接口和
我的所有控制器都是从这个基类派生的,但是如果有一个更优雅的(ASP.NET MVCISH)解决方案,我会很乐意实现它。我注意到httpContextBase实现
IServiceProvider
. 哪里是
GetService
方法将寻找服务?这很容易被嘲笑吗?