首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MVC SitemapProvider与AppFabric

使用MVC SitemapProvider与AppFabric
EN

Stack Overflow用户
提问于 2014-09-03 13:41:50
回答 1查看 102关注 0票数 1

在我们的asp.net mvc web项目中,我们使用mvc站点地图提供者作为面包屑的解决方案。基本内容运行良好,但现在我们对其进行了更深入的研究,并对SiteMapCacheRelease属性感到好奇。文档声明,该属性为给定的缓存键清除缓存。

对于我们的应用程序,我们使用AppFabric作为缓存解决方案。问题是,如何使mvc sitemapProvider强制使用AppFabric?

我觉得下面的一行负责控制应该使用哪个缓存(在MvcSiteMapContainerInitializer中)。

代码语言:javascript
复制
container.RegisterSingle<System.Runtime.Caching.ObjectCache>(() => System.Runtime.Caching.MemoryCache.Default);

我怎么才能把这两个人结合起来?(AppFabric使用DataCache,而SiteMapProvider似乎期望ObjectCache.)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-03 21:36:41

实际上,在默认设置中缓存有两个扩展点-- System.Runtime.Caching.ObjectCache和MvcSiteMapProvider.Caching.ICacheProvider。盒子中还包含了两个ICacheProvider实现,AspNetCacheProvider (System.Web.Caching)和RuntimeCacheProvider (System.Runtime.Caching),但此时还没有DataCacheProvider。如果您决定实现对MvcSiteMapProvider做出贡献,这将是一件很棒的事情。

有一个张贴在这里将介绍如何实现您自己的缓存提供程序。大多数情况下,您只需从RuntimeCacheProvider复制和粘贴代码,然后编辑它以接受构造函数中的DataCache而不是ObjectCache。当然,您需要负责将方法连接到底层提供者,但是只有5个方法和1个事件需要处理。线程锁定代码已经由MicroCacheLazyLock处理,所以您只需要实现操作本身。

请注意,您还需要实现自己的缓存依赖项,以使其在文件更改时自动重新加载,这是一个稍微模糊的过程。ICacheDependency返回一个对象数据类型。您的缓存提供程序必须以这样的方式实现,即ICacheProvider可以通过配置NullCacheProvider来返回null以指示没有缓存依赖项,而您的实现应该与NullCacheProvider兼容。

还有附加多个依赖项的问题--您应该实现一个类似于DataCompositeCacheDependency类的RuntimeCompositeCacheDependency类。这意味着所有依赖项提供程序都应该返回一个IList (或其他一些集合类型)并防止null,这样它们就可以无缝地插入到彼此之间。我对DataCache还不太了解,不知道如何实现它,但是如果您查看现有的缓存依赖项,它应该会给您提供思考的食粮。如果所有这些都失败了,您可以只使用NullCacheDependency,并且在底层数据更改时完全依靠CacheReleaseAttribute重新加载SiteMap。

还有一个请求缓存装饰器这里,您可能希望使用它来防止SiteMap对象在每个请求中加载多次。您可能需要它,直到版本4.7发布,以防止抛出异常,这取决于您如何配置缓存设置(有关详细信息,请参阅链接)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25645956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档