public virtual IMessageProvider Register(MessageKind[] kinds) { if (kinds == null || kinds.Length < 1) throw new ArgumentNullException("kinds"); kinds = kinds.Distinct().OrderBy(e => e).ToArray(); if (kinds == null || kinds.Length < 1) throw new ArgumentNullException("kinds"); // 检查注册范围是否有效 var ks = Kinds; if (ks != null) { foreach (var item in kinds) { if (Array.IndexOf<MessageKind>(ks, item) < 0) throw new ArgumentOutOfRangeException("kinds", "当前消息提供者不支持Kind=" + item + "的消息!"); } } var mc = new MessageConsumer() { Parent = this, Kinds = kinds }; lock (Consumers) { Consumers.Add(mc); } mc.OnDisposed += (s, e) => Consumers.Remove(s as MessageConsumer); return mc; }