交叉邮件: https ://orchard.codeplex.com/discussions/459007
我的第一个问题是,在 2 个不同的模块中为同一 Part 设置 2 个 PartHandler 会产生什么影响?
我陷入了这种困境,因为一旦创建了特定的内容类型,我就必须运行一个方法。为部件连接 OnCreated 很容易,但是,这是我的场景:
- 模块 A 包含零件和原始处理程序
- 模块 B 包含方法所在的服务
- 模块 B 引用了模块 A
因此,我无法在模块 A 中引用模块 B(循环引用)。所以我所做的就是在模块 A 中复制完全相同的 PartHandler 并将其放在模块 B 中。
那会有什么问题吗?
然后是我的第二个问题,我认为这可以解决所有这些问题:我们可以为 Content Item 的默认 Content Part 创建一个 PartHandler 吗?(即所有自定义字段都附加到的部分)
这肯定会让事情变得更容易,因为我可以整合需要在那里运行的东西。
更新 1(为了更好地解释问题 2)
ContentDefinitionManager.AlterPartDefinition("EventItem",
builder => builder
.WithField("StartDate", cfg => cfg
.OfType("DateTimeField")
.WithDisplayName("Start Date")
.WithSetting("DateTimeFieldSettings.Display", "DateOnly")
.WithSetting("DateTimeFieldSettings.Required", "true"))
.WithField("StartTime", cfg => cfg
.OfType("DateTimeField")
.WithDisplayName("Start Time")
.WithSetting("DateTimeFieldSettings.Display", "TimeOnly"))
.WithField("EndDate", cfg => cfg
.OfType("DateTimeField")
.WithDisplayName("End Date")
.WithSetting("DateTimeFieldSettings.Display", "DateOnly"))
.WithField("EndTime", cfg => cfg
.OfType("DateTimeField")
.WithDisplayName("End Time")
.WithSetting("DateTimeFieldSettings.Display", "TimeOnly"))
.WithField("Intro", cfg => cfg
.OfType("TextField")
.WithDisplayName("Intro")
.WithSetting("TextFieldSettings.Flavor", "textarea"))
ContentDefinitionManager.AlterTypeDefinition(
"EventItem"
, cfg =>
cfg
.DisplayedAs("Event Item")
.WithPart("TitlePart")
.WithPart("EventItem")
.WithPart("LocationPart")
.WithPart("AutoroutePart", builder => builder
.WithSetting("AutorouteSettings.AllowCustomPattern", "true")
.WithSetting("AutorouteSettings.AutomaticAdjustmentOnEdit", "false")
.WithSetting("AutorouteSettings.PatternDefinitions", "[{Name:'Title', Pattern: 'learn/events/{Content.Slug}', Description: 'learn/events/event-title'}]")
.WithSetting("AutorouteSettings.DefaultPatternIndex", "0"))
.WithPart("CommonPart")
.Draftable()
.Creatable()
);
我说的是为包含所有自定义字段的 EventItem 部分创建一个 ContentHandler。当解决方案的任何类中未定义 EventItemPart 时,我该如何处理?
由于找不到 EventItemPart 类,以下内容将不起作用:
OnCreated<EventItemPart>((context, keynotes) =>
questionService.SetDefaultQuestions(context.ContentItem));