我正在尝试(但失败)让属性注入在 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();
}
}
}