簡體   English   中英

Orchard CMS:以編程方式獲取自定義內容部分的元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM