【问题标题】:Autofac - injecting UmbracoContext.ContentCacheAutofac - 注入 UmbracoContext.ContentCache
【发布时间】:2016-03-04 15:59:46
【问题描述】:

在我的一个项目中,我使用了多个存储库,其中一个是 Umbraco 内容缓存。虽然我认为这是保持网站与 Umbraco 松散集成的一种好方法,但我遇到了一个问题:将 UmbracoContext.ContentCache 从控制器注入到存储库,因为 UmbracoContext.ContentCache 仅在页面请求生命周期中可用。有没有人尝试过这样做?或者这似乎是一个不好的方法?我正在使用 Autofac 进行 DI。

【问题讨论】:

  • 我很好奇为什么你需要在 repo 层中使用 ContentCache。你想做什么?
  • 该网站比在 Umbraco 中管理的几个(或更多)页面要复杂得多。它具有 Umbraco 之外的功能并与其他系统集成。所以将 Umbraco 内容缓存放在服务抽象之后是有道理的。 Umbraco 被用于覆盖利益相关者的 SEO 利益,并为内容开发人员提供有限的控制权以进行即时更改、管理博客微站点等......

标签: c# umbraco autofac umbraco7


【解决方案1】:

因为UmbracoContext.Current 是页面生命周期中的单例集,您只需将 Umbraco.Core 添加到存储库层并使用单例访问缓存。无论如何,所有这些都已经发生了,无需再依赖 autofac 来做。

另外,虽然我不确定这是否是正确的方法,但我使用 autofac 注册了 UmbracoHelper,它可以访问类型化和动态缓存。

builder.Register(c => new UmbracoHelper(UmbracoContext.Current));

【讨论】:

    【解决方案2】:

    设法找到解决方案。我想知道 contentCache 引用应该在请求的上下文之外可用。并在这里查看代码https://github.com/umbraco/Umbraco-CMS/blob/4a101786972bb591bb5d22acd043cc9f9da267ed/src/Umbraco.Web/UmbracoContext.cs

    我发现这是将 contentCache 注入到存储库的方法:

    builder.Register(
                ctx => new UmbracoContentCacheWrapper(global::Umbraco.Web.UmbracoContext.Current.ContentCache)).InstancePerHttpRequest()
                .As<IContextualPublishedContentCache>();
    

    祝大家周五快乐!

    【讨论】:

      猜你喜欢
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 2017-01-26
      • 1970-01-01
      相关资源
      最近更新 更多