【问题标题】:Orchard module loading event果园模块加载事件
【发布时间】:2011-12-19 13:04:55
【问题描述】:

我是 Orchard CMS 的新手,我已经开始编写我的第一个模块。我一直在寻找一种方法来检测我的模块何时从根网站初始化但没有运气!

一位同事建议使用 WebActivator 和 PreApplicationStartMethod 属性来配置要在启动时调用的方法,但这不起作用。

有没有人设法做到这一点,有没有像 IModule 这样的果园提供的接口,可以让我挂钩模块初始化?

【问题讨论】:

    标签: orchardcms


    【解决方案1】:

    有两个您可能感兴趣的事件处理程序。 IFeatureEventHandlerIOrchardShellEventsIFeatureEventHandler 接口为您提供了启用、禁用、安装和卸载模块的挂钩。 IOrchardShellEvents 接口提供了激活和终止 Orchard Shell 的钩子。里面的东西应该可以为您解决问题!

    【讨论】:

      【解决方案2】:

      您不应该混淆 Autofac 和 Orchard 的模块。 要在 Orchard 的模块启动时执行一些代码,您需要实现 IOrchardShellEvents 接口(激活方法)。也不要忘记在 Autofac 中注册你的实现:

      public class MyModule : Module
      {
          protected override void Load(ContainerBuilder builder)
          {
              builder.RegisterType<Bootstrapper>().As<IOrchardShellEvents>().InstancePerLifetimeScope();
          }
      }
      

      【讨论】:

      • 在我的脑海中,IOrchardShellEventsIEventHandler 的实现,而IDependency 又是IDependency 的实现,所以我认为您甚至不需要注册您的实现如上所述。您只需执行IOrchardShellEvents,Orchard 将为您处理注册。
      【解决方案3】:

      解决了!实现 Autofac.Module 并覆盖 Load(ContainerBuilder) 方法!

      using Autofac;
      
      public class MyModule : Module
      {
          protected override void Load(ContainerBuilder builder)
          {
               // Module initialization here!
          }
      }
      

      【讨论】:

      • 虽然这是一个入口点,但它不是正确的,请参阅其他答案
      • 如果这是 2011 年的最佳答案,那现在就不是正确答案了。使用 IOrchardShellEvents 或 IFeatureEventHandler。
      • 更具体地说,您可能需要 IOrchardShellEvents,因为您希望在每次初始化 Orchard 时都收到通知,而不仅仅是在您的模块首次激活时。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 2012-03-01
      相关资源
      最近更新 更多