1

我正在尝试(但失败)让属性注入在 Orchard CMS 中工作。

这是必要的,因为下面的代码就像一个视图的代码隐藏(我知道很可怕)。原因是视图没有我可以使用构造函数注入的控制器,因为这是 a 的替代视图MenuItem,即MenuItemLink-MyCustomMenuItem.cshtml.

除了注释中的内容(请注意我试图在下面的代码中设置的属性的 NULL 注释)之外,没什么可说的了。

哦,我也尝试过改编 Orchard's 的属性注入代码LoggingModule,但同样对我也不起作用。

我如何 :

一种。让下面的属性注入工作?(我很确定无论如何我都会需要它)

湾。(如果可能)以视图的方式获取我自己的控制器/驱动程序,以便我可以在控制器上使用构造函数注入来代替?

using System.Diagnostics;
using System.Xml.Linq;
using Autofac;
using Autofac.Core;
using Orchard;
using Module = Autofac.Module;

namespace MyCo.MyCustomMenuItem.Services 
{

    public class MyCustomMenuItemModule : Module 
    {

        protected override void AttachToComponentRegistration(
            IComponentRegistry componentRegistry, 
            IComponentRegistration registration)
        {
            if (implementationType.ToString() == 
                        "MyCo.MyCustomMenuItem.Services.MyCustomMenuItem") 
            {
                // this does get called, but doesn't have the desired effect
                registration.Activated += (s, e) => 
                         e.Context.InjectUnsetProperties(e);
            }
        }

    }

    public interface IFeedX : IDependency 
    {
        XDocument GetResource();
    }

    public class FeedX : IFeedX
    {
        public XDocument GetResource() 
        {
            return new XDocument();
        }
    }

    public interface IMyCustomMenuItem : IDependency 
    {
        XDocument GetResourceData();

        IFeedX FeedX { get; set; }
    }   

    public class MyCustomMenuItem : IMyCustomMenuItem
    {
        public IFeedX FeedX { get; set; }

        // called direct by razor view
        public XDocument GetResourceData()
        {
            Debug.WriteLine(FeedX); // NULL??

            return FeedX.GetResource(); 
        }

    }

}
4

1 回答 1

1

您绝对不应该在视图中执行任何此类操作。我认为这篇文章描述了一个接近你想要实现的场景:http ://www.davidhayden.me/blog/dynamically-injecting-menu-items-in-orchard-cms

于 2013-02-06T17:42:00.443 回答