我正在尝试(并且失败)在Orchard CMS中使用属性注入工作。
这是必要的,因为下面的代码就像一个视图的代码隐藏(我知道可怕)。原因是视图没有可以使用构造函数注入的控制器,因为这是MenuItem
的备用视图,即MenuItemLink-MyCustomMenuItem.cshtml
。
除此之外不多说,除了注释中的内容(请注意我尝试在下面的代码中设置的属性的NULL注释)。
哦,我也尝试过调整Orchard的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();
}
}
}
答案 0 :(得分:1)
你绝对不应该在视图中做任何类型的事情。我认为本文描述了一个与您要实现的目标接近的场景:http://www.davidhayden.me/blog/dynamically-injecting-menu-items-in-orchard-cms