我正在为Orchard CMS编写一个模块,其中包含一个实现IOrchardShellEvents接口的事件处理程序类.
当使用Core配方设置Orchard的库存实现时,我启用了我的模块,只有三个活动实现IOrchardShellEvents.默认情况下,它们按以下顺序调用:
AliasHolderUpdater(来自Orchard.Alias模块)AutomaticDataMigrations(来自Orchard.Framework).我想设置它们,以便在触发适用的事件时,我的类被调用晚于AutomaticDataMigrations.我尝试过在我的模块中使用Dependencies和Priority字段Modules.txt,但我不能让我的课程运行得晚AutomaticDataMigrations.
我尝试过的事情:
我尝试将Dependencies:Orchard.Framework添加到我的模块中Module.txt.这似乎什么都不做.但是,当我添加Dependencies:Orchard.Alias时Module.txt,我的类确实被称为晚于AliasHolderUpdater.它只是不起作用AutomaticDataMigrations,这是其中的一部分Orchard.Framework.
我尝试将Priority:1添加到我的模块中Module.txt.这确实导致我的IOrchardShellEvents类比模块中存在的其他实现更晚调用,例如AliasHolderUpdater.然而,即便如此,它仍然称为AutomaticDataMigrations最后.
查看该ExtensionManager.AvailableFeatures方法,可以看出所有特征都按依赖性和优先级的顺序加载.这意味着IDependency每个模块的实际对象都按此顺序注册AutoFac.
(详细说明中可以看到DependencyOrdering.OrderByDependenciesAndPriorities,CompositionStrategy.Compose和ShellContainerFactory.CreateContainer方法)
我没有看到一种方法来控制驻留在模块中的类的注册顺序Orchard.Framework,而不是"Orchard模块",并且不遵循模块加载的常规规则.
因为我们的目的AutomaticDataMigrations是确保运行最新的数据库迁移,所以我希望稍后调用我的类,这样当我的事件处理程序运行时,我可以确定它可以使用设置的数据库表通过迁移.
如何注册我的课程以后运行AutomaticDataMigrations?或者,这需要修改Orchard本身吗?