Example #1
0
 /// <summary>
 /// CreateEventBridge 创建实现了IEventBridge接口的实例。注意返回实例后,要调用其Initialize方法完成初始化。
 /// </summary>
 /// <param name="eventPublisher">发布事件的对象</param>
 /// <param name="eventHandler">包含了事件处理器方法的对象</param>
 /// <param name="eventAndHanlerMapping">事件名称与处理器方法名称的映射</param>
 /// <returns>实现了IEventBridge接口的实例。</returns>
 public static IEventBridge CreateEventBridge(object eventPublisher, object eventHandler, IDictionary <string, string> eventAndHanlerMapping)
 {
     lock (DynamicEventBridgeFactory.DynamicEventBridgeEmitter)
     {
         Type         eventBridgeType = DynamicEventBridgeFactory.DynamicEventBridgeEmitter.EmitEventBridgeType(eventPublisher.GetType(), eventHandler.GetType(), eventAndHanlerMapping);
         IEventBridge bridge          = (IEventBridge)Activator.CreateInstance(eventBridgeType, eventPublisher, eventHandler);
         return(bridge);
     }
 }
Example #2
0
 /// <summary>
 /// CreateEventBridge 创建实现了IEventBridge接口的实例。注意返回实例后,要调用其Initialize方法完成初始化。
 /// </summary>
 /// <param name="eventPublisher">发布事件的对象</param>
 /// <param name="eventHandler">包含了事件处理器方法的对象</param>
 /// <param name="eventHandlerNamePrefix">处理器方法的名称的前缀(即该前缀加上事件名称就得到处理器方法的名称)</param>
 /// <returns>实现了IEventBridge接口的实例。</returns>
 public static IEventBridge CreateEventBridge(object eventPublisher, object eventHandler, string eventHandlerNamePrefix)
 {
     lock (DynamicEventBridgeFactory.DynamicEventBridgeEmitter)
     {
         Type         eventBridgeType = DynamicEventBridgeFactory.DynamicEventBridgeEmitter.EmitEventBridgeType(eventPublisher.GetType(), eventHandler.GetType(), eventHandlerNamePrefix);
         IEventBridge bridge          = (IEventBridge)Activator.CreateInstance(eventBridgeType, eventPublisher, eventHandler);
         return(bridge);
     }
 }
Example #3
0
 /// <summary>
 /// CreateEventBridge 创建实现了IEventBridge接口的实例。注意返回实例后,要调用其Initialize方法完成初始化。
 /// </summary>
 /// <typeparam name="TPublisher">发布事件的类型(通常为接口),暴露了要匹配的事件</typeparam>
 /// <typeparam name="THandler">包含了事件处理方法的接口类型</typeparam>
 /// <param name="eventPublisher">发布事件的对象</param>
 /// <param name="eventHandler">包含了事件处理器方法的对象</param>
 /// <param name="eventAndHanlerMapping">事件名称与处理器方法名称的映射</param>
 /// <returns>实现了IEventBridge接口的实例。</returns>
 public static IEventBridge CreateEventBridge <TPublisher, THandler>(TPublisher eventPublisher, THandler eventHandler, IDictionary <string, string> eventAndHanlerMapping)
 {
     lock (DynamicEventBridgeFactory.DynamicEventBridgeEmitter)
     {
         Type            eventBridgeType = DynamicEventBridgeFactory.DynamicEventBridgeEmitter.EmitEventBridgeType(typeof(TPublisher), typeof(THandler), eventAndHanlerMapping);
         ConstructorInfo ctor            = eventBridgeType.GetConstructors()[0];
         IEventBridge    bridge          = (IEventBridge)ctor.Invoke(new object[] { (TPublisher)eventPublisher, (THandler)eventHandler });//(IEventBridge)Activator.CreateInstance(eventBridgeType, (TPublisher)eventPublisher, (THandler)eventHandler);
         return(bridge);
     }
 }