asp.net – .NET 4.0 ObjectCache的线程安全和范围管理
|
我正在使用新的.NET 4.0 Caching API,ObjectCache.过去几天我已经在这方面问了几个问题,我暗示了这个问题 – 但是认为将其分解成自己的问题是值得的. 因为类是抽象的,所有的方法都是虚拟的,这意味着我们可以创建自己的自定义缓存提供者. 根据MSDN,ObjectCache不一定是单例,您可以在应用程序中创建多个实例. 但对我来说,这听起来就像我们需要管理这个对象的实例化和生命周期一样? 我有一个ASP.NET MVC 3 Web应用程序,StructureMap作为我的依赖注入容器. 我想为我的整个Web应用程序设置一个单独的共享缓存. 所以,我创建一个非常简单的类,它包装了ObjectCache类,并在方法实现中提供了拆箱. 该类在ctor中使用ObjectCache的一个实例,并将其设置为高速缓存的私有静态实例,方法(Add,Get等)可用. 例如 public class CacheManager
{
private static ObjectCache _cache;
public CacheManager(ObjectCache cache)
{
_cache = cache;
}
// Add,Get,Remove methods work off _cache instance.
}
现在,这是我的DI注册表: For<CacheManager>().Singleton().Use<CacheManager>().Ctor<ObjectCache>("cache").Is(MemoryCache.Default);
在英语中:当某事物请求CacheManager实例时,使用单例实例,并将ObjectCache参数设置为MemoryCache实例. 所以我有什么,现在的问题: >如果我有一个类来包装ObjectCache,这个类是否需要一个单例? 我无法在ASP.NET Web应用程序中找到一个有关.NET ObjectCache的体面博客/文章,因此我的困惑. 我使用HttpContext.Current.Cache(这是静态的),而不关心缓存的生命周期管理. 解决方法>由于MemoryCache.Default是一个单例,因此无状态类不一定是一个.但是,这完全取决于你.>您不应该需要锁定ObjectCache实例. >否,否.使静态不提供任何价值.指示它在StructureMap中是单例,使得GetInstance&()总是返回相同的对象. >包装ObjectCache的真正价值将是缓存实现的抽象,所以你可以改变它或模拟它.没有接口,这不太有用. 下面的示例实现… public interface ICacheManager
{
// add,get,remove,etc
}
public class CacheManager : ICacheManager
{
private static ObjectCache _cache;
public CacheManager(ObjectCache cache)
{
_cache = cache;
}
// Add,Remove methods work off _cache instance.
}
然后… For<ICacheManager>()
.Singleton()
.Use<CacheManager>();
For<ObjectCache>()
.Use(MemoryCache.Default);
如果您想要更改您以后仍然是ObjectCache的缓存提供程序,那么很容易调整. 我希望这有帮助! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-core-mvc – 如何考虑请求和响应范围标头流式传输视
- asp.net – Javascript之前asp:ButtonField点击
- asp.net-mvc – 用于ASP.NET MVC的Spark T4模板
- asp-classic – 如何在经典ASP中将数据POST到远程URL?
- ASP.NET微信公众号用于给指定OpenId用户发送红包
- asp.net-mvc – 如何进入MVC4源代码,而无需构建程序集
- asp.net-mvc-routing – 在.NET MVC 4.0 URL结构中强制使用
- asp.net-mvc – 哪一层应该构建一个View Model?
- asp.net-mvc-3 – ASP.NET MVC 3书籍计划
- asp.net-mvc – ASP.NET MVC单元测试控制器与HttpContext
- asp.net-mvc – ASP.NET MVC QueryString默认覆盖
- asp.net – 使用vb.net和EPPlus的单元格包装
- razor – 如何定义在asp.net核心中返回html的函数
- asp.net-mvc – MVC 4从基本路由中删除“home”
- 将变量从ASP.net传递给JavaScript
- asp.net-mvc – ASP.NET MVC – 向ActionLinks添
- asp.net下创建、查询、修改带名称空间的 XML 文件
- asp.net-mvc-routing – 在MVC 6控制器中使用url
- asp.net – Internet Explorer 11在服务器端的检
- asp.net-mvc – 奇怪的MVC问题
