Dependency injection 属性注入和/或向备用菜单项视图添加控制器
我正在尝试(但失败)让财产注入在Orchard CMS中工作 这是必要的,因为下面的代码的行为类似于视图的代码隐藏(我知道这很可怕)。原因是该视图没有我可以使用构造函数注入的控制器,因为这是Dependency injection 属性注入和/或向备用菜单项视图添加控制器,dependency-injection,orchardcms,autofac,property-injection,Dependency Injection,Orchardcms,Autofac,Property Injection,我正在尝试(但失败)让财产注入在Orchard CMS中工作 这是必要的,因为下面的代码的行为类似于视图的代码隐藏(我知道这很可怕)。原因是该视图没有我可以使用构造函数注入的控制器,因为这是MenuItem的替代视图,即MenuItemLink MyCustomMenuItem.cshtml 除了注释中的内容(注意我试图在下面的代码中设置的属性的空注释)之外,没有更多的说明 哦,我也尝试过从Orchard的LoggingModule修改属性注入代码,但同样地,这对我也不起作用 我如何: a。让下
MenuItem
的替代视图,即MenuItemLink MyCustomMenuItem.cshtml
除了注释中的内容(注意我试图在下面的代码中设置的属性的空注释)之外,没有更多的说明
哦,我也尝试过从Orchard的LoggingModule
修改属性注入代码,但同样地,这对我也不起作用
我如何:
a。让下面的属性注入工作吗?(无论如何,我很确定我会在某个时候需要它)
b。(如果可能)在视图中使用我自己的控制器/驱动程序,这样我就可以在控制器上使用构造函数注入了
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();
}
}
}
你绝对不应该在视图中做任何类似的事情。我认为这篇文章描述了一个接近您试图实现的场景:您绝对不应该在视图中执行任何类似的操作。我认为这篇文章描述了一个接近您想要实现的场景:谢谢,我这个周末一定会看一看,看看它是否满足了我的需要。顺便说一句,知道为什么属性注入不起作用吗(假定调用了attach方法)?Orchard依赖于构造函数注入。属性注入只适用于极少数情况,例如定位器,我甚至不确定这些限制是什么。在任何情况下,在这种情况下都没有很好的理由这样做。好的,我看了一下您提供的链接中的代码,但这只是将一些文本注入菜单项,即MenuItem.text=new LocalizedString(tag.TagName)。然而,我希望通过一个视图(或部分视图)为菜单项提供完全定制的html,该视图是从外部源动态填充的。目前,我能找到的唯一方法是通过一个备用视图和一个代码隐藏(使用您链接的示例,我可以在代码中生成html,并将其注入,但html非常重要,因此我想使用一个视图进行维护)。查看HTMLMemueItem内容类型:它有菜单部分、主体部分、公共部分,标识部分和具有原型
MenuItem
。这应该清楚地表明,菜单项只是带有菜单项原型的内容类型,因此您可以构建完全任意的项目类型并添加自己的自定义部分。绝对不需要在视图中使用代码隐藏或肮脏的黑客行为。谢谢,我一定会在这个周末查看一下,看看它是否符合我的需要。顺便说一句,知道为什么属性注入不起作用吗(假定调用了attach方法)?Orchard依赖于构造函数注入。属性注入只适用于极少数情况,例如定位器,我甚至不确定这些限制是什么。在任何情况下,在这种情况下都没有很好的理由这样做。好的,我看了一下您提供的链接中的代码,但这只是将一些文本注入菜单项,即MenuItem.text=new LocalizedString(tag.TagName)。然而,我希望通过一个视图(或部分视图)为菜单项提供完全定制的html,该视图是从外部源动态填充的。目前,我能找到的唯一方法是通过一个备用视图和一个代码隐藏(使用您链接的示例,我可以在代码中生成html,并将其注入,但html非常重要,因此我想使用一个视图进行维护)。查看HTMLMemueItem内容类型:它有菜单部分、主体部分、公共部分,标识部分和具有原型MenuItem
。这应该清楚地表明,菜单项只是带有菜单项原型的内容类型,因此您可以构建完全任意的项目类型并添加自己的自定义部分。绝对不需要在视图中使用代码隐藏或肮脏的黑客。链接到Orchard中的财产注入,供感兴趣的人使用:(1)和(2)链接到Orchard中的财产注入,供感兴趣的人使用:(1)和(2)