2016-03-04 57 views
2

在我的一個項目中,我使用了多個存儲庫,其中一個是Umbraco內容緩存。雖然我認爲這是保持網站與Umbraco鬆散集成的好方法,但我遇到了一個問題:從控制器注入UmbracoContext.ContentCache到存儲庫,因爲UmbracoContext.ContentCache僅在頁面請求生命週期中可用。有沒有人試圖這樣做?或者它似乎是一個壞方法?我正在使用Autofac進行DI。Autofac - 注入UmbracoContext.ContentCache

enter image description here

+0

我很好奇爲什麼你需要在回購層的ContentCache。你想做什麼? –

+0

這個網站是一個非常複雜的網站,而不僅僅是在Umbraco中管理的幾個(或更多)網頁。它具有Umbraco以外的功能並與其他系統集成。因此,將Umbraco內容緩存置於服務抽象背後是有道理的。 Umbraco被用於涵蓋利益相關者的搜索引擎優化利益,併爲內容開發者提供有限的控制,以便進行實時更改,管理博客微型網站等。 – droidbot

回答

2

因爲UmbracoContext.Current是在頁面生命週期中設置的單例,所以只需要將Umbraco.Core添加到存儲庫層並使用單例訪問緩存即可。所有這些都已經發生了,無需再依賴autofac來完成。另外,雖然我不確定如果這是正確的方法,但我使用autofac註冊了UmbracoHelper,它可以訪問類型化和動態緩存。

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

正是我所做的@Sam ..謝謝 :) – droidbot

0

設法找到一個解決方案。我想知道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>(); 

快樂星期五一切!