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