AreaContentRenderer Ctor不接受IContentAreaItemAttributeAssembler

时间:2017-07-26 12:10:27

标签: .net asp.net-mvc episerver

我需要覆盖ContentAreaRenderer以在所有模板上实现DisplayOptions。

我需要在ContentArea中呈现显示选项,以便它会影响所有模板。

我试图实施这个解决方案 https://world.episerver.com/blogs/Anders-Hattestad/Dates/2014/8/Extending-ContentArea-to-use-custom-CSS-class-on-child-elements/

出了什么问题 我收到了错误 “ContentFragmentAttributeAssembler已过时使用IContentAreaItemAttributeAssembler” 当我改变类型时我得到一个问题,因为基础构造函数不采用en IContentAreaItemAttributeAssembler而是过时的ContentFragmentAttributeAssembler

   public class ContentAreaRendererWithDisplayOptionWithCss : ContentAreaRenderer
    {
        private readonly DisplayOptions _displayOptionsOwn;
        private readonly IContentRepository _contentRepositoryOwn;
        public ContentAreaRendererWithDisplayOptionWithCss()
            : this(
                  ServiceLocator.Current.GetInstance<IContentRenderer>(), 
                  ServiceLocator.Current.GetInstance<TemplateResolver>(), 
                  ServiceLocator.Current.GetInstance<IContentAreaItemAttributeAssembler>(), 
                  ServiceLocator.Current.GetInstance<IContentRepository>(), 
                  ServiceLocator.Current.GetInstance<DisplayOptions>())
        {

        }
        public ContentAreaRendererWithDisplayOptionWithCss(
            IContentRenderer contentRenderer, 
            TemplateResolver templateResolver, 
            IContentAreaItemAttributeAssembler attributeAssembler, 
            IContentRepository contentRepository, 
            DisplayOptions displayOptions)
            : base(contentRenderer, 
                  templateResolver, 
                  attributeAssembler, 
                  contentRepository, 
                  displayOptions)
        {
            _displayOptionsOwn = displayOptions;
            _contentRepositoryOwn = contentRepository;
        }

    }

1 个答案:

答案 0 :(得分:0)

也许您需要重新排列属性。在我看来,新的构造函数确实采用了IContentAreaItemAttributeAssembler:

enter image description here

在您的示例中,您没有传递IContentAreaLoader,它应该是基本构造函数中的最后一个参数,而不是您的display DisplayOptions。

public ContentAreaRendererWithDisplayOptionWithCss(
        IContentRenderer contentRenderer,
        TemplateResolver templateResolver,
        IContentAreaItemAttributeAssembler attributeAssembler,
        IContentRepository contentRepository,
        IContentAreaLoader contentAreaLoader,
        DisplayOptions displayOptions)
        : base(contentRenderer, 
              templateResolver, 
              attributeAssembler, 
              contentRepository,
              contentAreaLoader)
    {
        _displayOptionsOwn = displayOptions;
        _contentRepositoryOwn = contentRepository;
    }