using Castle.MicroKernel; using Castle.MicroKernel.Registration; using Castle.MicroKernel.SubSystems.Configuration; using Castle.Windsor; using System.Reflection; namespace VberZero.Workflow; internal class WorkflowInstaller : IWindsorInstaller { //private readonly IIocResolver _iocResolver; private IVberWorkflowRegistry _workflowRegistry; // public WorkflowInstaller(IIocResolver iocResolver) // { // _iocResolver = iocResolver; // } public void Install(IWindsorContainer container, IConfigurationStore store) { _workflowRegistry = container.Resolve(); container.Kernel.ComponentRegistered += Kernel_ComponentRegistered; } private void Kernel_ComponentRegistered(string key, IHandler handler) { /* This code checks if registering component implements any IEventHandler interface, if yes, * gets all event handler interfaces and registers type to Event Bus for each handling event. * 此代码检查注册组件是否实现了任何 IEventHandler 接口,如果是,则获取所有事件处理程序接口并将每个处理事件的类型注册到事件总线。 */ if (!typeof(IVberWorkflow).GetTypeInfo().IsAssignableFrom(handler.ComponentModel.Implementation)) { return; } var interfaces = handler.ComponentModel.Implementation.GetTypeInfo().GetInterfaces(); foreach (var @interface in interfaces) { if (!typeof(IVberWorkflow).GetTypeInfo().IsAssignableFrom(@interface)) { continue; } _workflowRegistry.RegisterWorkflow(handler.ComponentModel.Implementation); } } }