[英]Orchard CMS: programmatically get elements of custom content part
我正在為Orchard CMS創建模塊 - 查看器小部件,用於自定義ContentType的元素。
所以,我有服務接口:
public interface IReviewGrabber : IDependency
{
IEnumerable<ReviewPart> Reviews { get; }
}
它的實施:
public class ReviewGrabber : IReviewGrabber
{
readonly IOrchardServices _orchardServices;
readonly IEnumerable<ReviewPart> _reviews;
public ReviewGrabber(IOrchardServices orchardServices)
{
_orchardServices = orchardServices;
var temp = _orchardServices.ContentManager.Query<ReviewPart, ReviewRecord>();
_reviews = temp.List();
}
public IEnumerable<ReviewPart> Reviews
{
get { return _reviews; }
}
}
和ContentType的處理程序:
public class ReviewHandler : ContentHandler
{
public ReviewHandler(IRepository<ReviewRecord> repository)
{
Filters.Add(StorageFilter.For(repository));
}
}
調試這個,我手動添加了Review類型的元素,它可以工作。 在ReviewGrabber
類中,變量temp
正確填充,但調用它的方法List()
會觸發錯誤:
ValueFactory嘗試訪問此實例的Value屬性。
_handlers.Value'_handlers.Value'引發了類型'System.InvalidOperationException'的異常System.Collections.Generic.IEnumerable {System.InvalidOperationException}
在一排
public IEnumerable<IContentHandler> Handlers {
get { return _handlers.Value; }
}
在DefaultContentManager.cs
怎么了? 謝謝!
對於初學者來說,在構造函數中進行查詢是一個很大的禁忌。 構造函數應該只做一些簡單的工作,比如初始化變量,而不是查詢數據庫。
同樣,財產癮者通常不應該做很多工作。 您應該使用GetReviews方法,根據需要進行查詢。 如有必要,可以稍后添加緩存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.