sitecore mvc中的自定义管道处理器和IOC

时间:2015-05-04 10:41:42

标签: sitecore inversion-of-control ioc-container sitecore-mvc sitecore7.5

sitecore mvc是否支持asp.net Web表单中的自定义管道?

我有一个实现RenderLayoutProcessor的类并覆盖Process方法。通过更新Web配置部分,此类名称将作为自定义处理器添加到管道中。如下所示。

<renderLayout>
    <processor type="Sitecore.Pipelines.PreprocessRequest.CheckIgnoreFlag, Sitecore.Kernel"/>
    <processor type="Sitecore.Pipelines.RenderLayout.PageHandlers, Sitecore.Kernel"/>
    <processor type="Sitecore.Pipelines.RenderLayout.SecurityCheck, Sitecore.Kernel"/>
    <processor type="Sitecore.Pipelines.RenderLayout.InsertRenderings, Sitecore.Kernel"/>

    <processor type="MysitecoreApp.Project.Pipelines.MyProcessor, MysitecoreApp.Project" />

    <processor type="Sitecore.Pipelines.RenderLayout.PageExtenders, Sitecore.Kernel"/>
    <processor type="Sitecore.Pipelines.RenderLayout.ExpandMasterPages, Sitecore.Kernel"/>
    <processor type="Sitecore.Pipelines.RenderLayout.BuildTree, Sitecore.Kernel"/>
    <processor type="Sitecore.Pipelines.RenderLayout.InsertSystemControls, Sitecore.Kernel"/>
    <processor type="Sitecore.Pipelines.RenderLayout.InsertUnusedControls, Sitecore.Kernel"/>
    <processor type="Sitecore.Pipelines.RenderLayout.BrowserCaching, Sitecore.Kernel"/>
</renderLayout>

流程方法会触发sitecore请求(例如http://website/sitecore/login),但不会触发网站页面请求(例如http://website/home)。

以下是课程定义。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sitecore.Data.Items;
using Sitecore.Layouts;
using Sitecore.Pipelines.RenderLayout;
using Sitecore.Mvc.Presentation;

namespace MysitecoreApp.Project.Pipelines
{
    public class MyProcessor : RenderLayoutProcessor
    {
        public override void Process(RenderLayoutArgs args)
        {
            var page = Sitecore.Context.Item;
            if (page != null)
            {

            }
        }
    }
}

我这样做是为了使用管道(RenderLayout Processor)实现IOC,如this example

所示

那么,这个管道概念会在sitecore MVC中运行吗?如果它不是如何在Sitecore MVC中实现IOC。我正在实现IOC,只有一个可以有多个渲染项的页脚组件。

1 个答案:

答案 0 :(得分:0)

这个问题的标题应该更像是自定义管道处理器和sitecore mvc中的条件渲染。

您列出的参考文献提到了处理条件渲染的方法。他们没有描述如何在Sitecore中实现IOC。 如果您在这里阅读:&#34;这个概念与IoC或依赖注入的概念非常相似,因此这个概念相当缺乏想象力。&#34;来自这篇文章:http://www.awareweb.com/awareweblegacy/awareblog/inversioncontrol1

在Sitecore中实现IOC的方法有很多种。我会使用Glass mapper和Castle Windsor作为IOC。

但我认为你的实际问题是: renderLayout管道是否适用于MVC视图? - 答案是否定的。尝试使用mvc.renderRendering管道。调查Sitecore.Mvc.config(https://github.com/HedgehogDevelopment/sitecore-mvc/blob/master/MvcNewsApp/App_Config/Include/Sitecore.Mvc.config

中的mvc管道