C# Orchard CMS:以编程方式获取自定义内容部件的元素
我正在为Orchard CMS-viewer小部件创建自定义ContentType元素的模块 因此,我有服务接口:C# Orchard CMS:以编程方式获取自定义内容部件的元素,c#,asp.net,razor,orchardcms,C#,Asp.net,Razor,Orchardcms,我正在为Orchard CMS-viewer小部件创建自定义ContentType元素的模块 因此,我有服务接口: public interface IReviewGrabber : IDependency { IEnumerable<ReviewPart> Reviews { get; } } 在DefaultContentManager.cs中 怎么了?谢谢大家! 对于初学者来说,在构造函数中执行查询是一个很大的禁忌。构造函数应该只做一些琐碎的工作,比如初始化变量,而
public interface IReviewGrabber : IDependency
{
IEnumerable<ReviewPart> Reviews { get; }
}
在DefaultContentManager.cs中
怎么了?谢谢大家! 对于初学者来说,在构造函数中执行查询是一个很大的禁忌。构造函数应该只做一些琐碎的工作,比如初始化变量,而不是查询数据库
类似地,属性获取程序通常不应该做很多工作。您应该使用GetReviews方法,根据需要进行查询。如有必要,可以稍后添加缓存
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; }
}
}
public class ReviewHandler : ContentHandler
{
public ReviewHandler(IRepository<ReviewRecord> repository)
{
Filters.Add(StorageFilter.For(repository));
}
}
public IEnumerable<IContentHandler> Handlers {
get { return _handlers.Value; }
}