Autofac - 注入UmbracoContext.ContentCache

时间:2016-03-04 15:59:47

标签: c# umbraco autofac umbraco7

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

enter image description here

2 个答案:

答案 0 :(得分:2)

因为UmbracoContext.Current是在页面生命周期中设置的单例,所以您只需要将Umbraco.Core添加到存储库层并使用单例来访问缓存。所有这一切都已经发生了,无需依靠autofac再做一次。

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

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

答案 1 :(得分:0)

Managed to find a solution. I was wondering that the contentCache reference should be available outside the request's context. And looking at the code here https://github.com/umbraco/Umbraco-CMS/blob/4a101786972bb591bb5d22acd043cc9f9da267ed/src/Umbraco.Web/UmbracoContext.cs

I found this is the way to inject contentCache down to the repositories:

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

Happy Friday all!