【发布时间】:2011-12-19 13:04:55
【问题描述】:
我是 Orchard CMS 的新手,我已经开始编写我的第一个模块。我一直在寻找一种方法来检测我的模块何时从根网站初始化但没有运气!
一位同事建议使用 WebActivator 和 PreApplicationStartMethod 属性来配置要在启动时调用的方法,但这不起作用。
有没有人设法做到这一点,有没有像 IModule 这样的果园提供的接口,可以让我挂钩模块初始化?
【问题讨论】:
标签: orchardcms
我是 Orchard CMS 的新手,我已经开始编写我的第一个模块。我一直在寻找一种方法来检测我的模块何时从根网站初始化但没有运气!
一位同事建议使用 WebActivator 和 PreApplicationStartMethod 属性来配置要在启动时调用的方法,但这不起作用。
有没有人设法做到这一点,有没有像 IModule 这样的果园提供的接口,可以让我挂钩模块初始化?
【问题讨论】:
标签: orchardcms
有两个您可能感兴趣的事件处理程序。 IFeatureEventHandler 和 IOrchardShellEvents。 IFeatureEventHandler 接口为您提供了启用、禁用、安装和卸载模块的挂钩。 IOrchardShellEvents 接口提供了激活和终止 Orchard Shell 的钩子。里面的东西应该可以为您解决问题!
【讨论】:
您不应该混淆 Autofac 和 Orchard 的模块。 要在 Orchard 的模块启动时执行一些代码,您需要实现 IOrchardShellEvents 接口(激活方法)。也不要忘记在 Autofac 中注册你的实现:
public class MyModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<Bootstrapper>().As<IOrchardShellEvents>().InstancePerLifetimeScope();
}
}
【讨论】:
IOrchardShellEvents 是IEventHandler 的实现,而IDependency 又是IDependency 的实现,所以我认为您甚至不需要注册您的实现如上所述。您只需执行IOrchardShellEvents,Orchard 将为您处理注册。
解决了!实现 Autofac.Module 并覆盖 Load(ContainerBuilder) 方法!
using Autofac;
public class MyModule : Module
{
protected override void Load(ContainerBuilder builder)
{
// Module initialization here!
}
}
【讨论】: