示例#1
0
        public static void Create(IMessageDistributor distributor)
        {
            MessageHub instance = new MessageHub();

            distributor.messageHub = instance;
            _distributor           = distributor;
        }
示例#2
0
 public ConsumerService(
     ILogger <ConsumerService> logger,
     IMessageDistributor messageDistributor,
     IOptions <EddnClientSettings> eddnClientSettings)
 {
     _logger             = logger;
     _messageDistributor = messageDistributor;
     _eddnClientSettings = eddnClientSettings.Value;
 }
        /// <summary>
        ///     注册Handler
        /// </summary>
        /// <param name="distributor">消息分发器</param>
        /// <param name="handlerType">Handler类型</param>
        public static void RegisterType(IMessageDistributor distributor, Type handlerType)
        {
            MethodInfo registerInfo = distributor.GetType().GetMethod("Register", BindingFlags.Public | BindingFlags.Instance);

            //单个Type,继承多个IHanderl<T>
            var handlers = from p in handlerType.GetInterfaces()
                           where p.IsGenericType &&
                           p.GetGenericTypeDefinition() == typeof(IHandler <>)
                           select p;

            foreach (var handler in handlers)
            {
                var handlerInstance = Activator.CreateInstance(handlerType);
                var tMessage        = handler.GetGenericArguments().First();
                var methodInfo      = registerInfo.MakeGenericMethod(tMessage);
                methodInfo.Invoke(distributor, new[] { handlerInstance });
            }
        }