小编Kat*_*uro的帖子

在Orchard CMS中,是否可以在模块中注册IEventHandler实现,而不是那些驻留在Orchard.Framework中的模块?

我正在为Orchard CMS编写一个模块,其中包含一个实现IOrchardShellEvents接口的事件处理程序类.

当使用Core配方设置Orchard的库存实现时,我启用了我的模块,只有三个活动实现IOrchardShellEvents.默认情况下,它们按以下顺序调用:

  1. 我的自定义事件处理程序(在我的定制模块中
  2. AliasHolderUpdater(来自Orchard.Alias模块)
  3. AutomaticDataMigrations(来自Orchard.Framework).

我想设置它们,以便在触发适用的事件时,我的类被调用晚于AutomaticDataMigrations.我尝试过在我的模块中使用DependenciesPriority字段Modules.txt,但我不能让我的课程运行得晚AutomaticDataMigrations.

我尝试过的事情:

  • 我尝试将Dependencies:Orchard.Framework添加到我的模块中Module.txt.这似乎什么都不做.但是,当我添加Dependencies:Orchard.AliasModule.txt,我的类确实被称为晚于AliasHolderUpdater.它只是不起作用AutomaticDataMigrations,这是其中的一部分Orchard.Framework.

  • 我尝试将Priority:1添加到我的模块中Module.txt.这确实导致我的IOrchardShellEvents类比模块中存在的其他实现更晚调用,例如AliasHolderUpdater.然而,即便如此,它仍然称为AutomaticDataMigrations最后.

查看该ExtensionManager.AvailableFeatures方法,可以看出所有特征都按依赖性和优先级的顺序加载.这意味着IDependency每个模块的实际对象都按此顺序注册AutoFac.

(详细说明中可以看到DependencyOrdering.OrderByDependenciesAndPriorities,CompositionStrategy.ComposeShellContainerFactory.CreateContainer方法)

我没有看到一种方法来控制驻留在模块中的类的注册顺序Orchard.Framework,而不是"Orchard模块",并且不遵循模块加载的常规规则.

因为我们的目的AutomaticDataMigrations是确保运行最新的数据库迁移,所以我希望稍后调用我的类,这样当我的事件处理程序运行时,我可以确定它可以使用设置的数据库表通过迁移.

如何注册我的课程以后运行AutomaticDataMigrations?或者,这需要修改Orchard本身吗?

c# autofac orchardcms

5
推荐指数
1
解决办法
698
查看次数

标签 统计

autofac ×1

c# ×1

orchardcms ×1