Orchard的Events是如何驱动的
ShellDescriptorManager类
ShellDescritorManager有个UpdateShellDescriptor方法
1 | public void UpdateShellDescriptor(int priorSerialNumber, IEnumerable<ShellFeature> enabledFeatures, IEnumerable<ShellParameter> parameters) { |
看最后的_events.Changed 是调用了IShellDescriptorManagerEventHandler接口的Changed方法。
那为什么一个EventHandler会命名为_events呢?答案在EventsRegistrationSource类中
EventsRegistrationSource类
1 | public IEnumerable<IComponentRegistration> RegistrationsFor(Service service, Func<Service, IEnumerable<IComponentRegistration>> registrationAccessor) { |
在构造器中指定了拦截器 EventsInterceptor ,拦截器又传入了EventBus.
EventsInterceptor类
我们来看看拦截方法是怎样的:
1 | public void Intercept(IInvocation invocation) { |
调用了eventBus的Notify方法
DefaultOrchardEventBus类
1 | public IEnumerable Notify(string messageName, IDictionary<string, object> eventData) { |
其实就是调用了各个实现IEventHandler接口的类。