【问题标题】:How to setup Ioc (Autofac) with Sitecore MVC如何使用 Sitecore MVC 设置 Ioc (Autofac)
【发布时间】:2015-08-13 13:27:47
【问题描述】:

有谁知道如何设置正确的 IoC (Autofac) 并将其与 Sitecore MVC 一起使用? 我已经创建了一个特定的管道,但是当 sitecore 渲染页面(控制器渲染)时,它看起来像解析不起作用。

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
    <sitecore>
        <pipelines>
            <initialize>
                <processor type="MyLib.AutofacProcessor, MyLib" />
            </initialize>
        </pipelines>
    </sitecore>
</configuration>

public class AutofacProcessor
{
    public void Process(PipelineArgs args)
    {
        AutofacProcessor.Start();
    }

    public static void Start()
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<MyService>().As<IMyService>().PropertiesAutowired();

        var container = builder.Build();
        IDependencyResolver resolver = new AutofacDependencyResolver(container);
        DependencyResolver.SetResolver(resolver);
    }
}

但是当 sitecore 调用它时,我在控制器中的属性为空。 如何在 Sitecore 术语中注册它?在常规 ASP MVC 中,这很容易。

【问题讨论】:

    标签: asp.net-mvc sitecore autofac sitecore8


    【解决方案1】:

    您还需要覆盖 Sitecore 的默认 ControllerFactory。

    <processor type="Sitecore.Mvc.Pipelines.Loader.InitializeControllerFactory, Sitecore.Mvc"/>
    

    这是 NInject 的一个示例,应该很容易修改它以使用 AutoFAC 做同样的事情:http://blog.istern.dk/2012/10/23/sitecore-mvc-new-ninject-controller-factory-clean-version/

    【讨论】:

    • 谢谢你,总的来说很清楚。但是我在实现 KernelFactory 和 DefaultControllerFactory 时确实遇到了问题,Autofac 应该是什么样子?
    • 您需要将 DefaultControllerFactory 替换为 AutoFacControllerFactory。简而言之,您需要在其中覆盖的唯一方法是 GetControllerInstance - 并让该方法通过 AutoFac 解析请求的类型(在 controllerType 参数中)。
    • 实现起来有点复杂,根据文章需要加载所有sitecore NinjectKernelFactory via,我真的怕弄错了。
    【解决方案2】:

    我创建了一篇关于如何将 Autofac 与 Sitecore MVC 结合使用以解决依赖关系的博文: http://sitecorecorner.com/2016/01/20/sitecore-mvc-autofac-dependency-resolution/

    您可以在BitBucket找到代码

    基本思想是创建一个AutofacContainerFactory - 来创建你的容器。 AutofacControllerFactory - 您将使用它来解决依赖关系并劫持&lt;processor type="Sitecore.Mvc.Pipelines.Loader.InitializeControllerFactory, Sitecore.Mvc"&gt; 处理器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多