/// <summary> /// 从程序集中加载集线器 /// </summary> /// <param name="assembly">包含集线器的程序集</param> public static void Load(Assembly assembly) { Contract.Requires <ArgumentNullException>(assembly != null, "assembly"); foreach (Type clazz in assembly.GetExportedTypes()) { if (!clazz.IsInterface && clazz.GetInterfaces().FirstOrDefault((i) => i.GUID == typeof(IHub <,>).GUID) != null) { HubAttribute attr = AttributeUnit.GetAttribute <HubAttribute>(clazz); if (attr != null) { ConstructorInfo ctor = clazz.GetConstructor(Type.EmptyTypes); object hub = ctor.Invoke(null); IDictionary <int, IDictionary <int, IDictionary <int, IDictionary <string, IDictionary <string, IDictionary <string, object> > > > > > a = m_bindings; IDictionary <int, IDictionary <int, IDictionary <string, IDictionary <string, IDictionary <string, object> > > > > b; IDictionary <int, IDictionary <string, IDictionary <string, IDictionary <string, object> > > > c; IDictionary <string, IDictionary <string, IDictionary <string, object> > > d; IDictionary <string, IDictionary <string, object> > e; IDictionary <string, object> f; if (!a.TryGetValue(attr.Condition1, out b)) { b = new Dictionary <int, IDictionary <int, IDictionary <string, IDictionary <string, IDictionary <string, object> > > > >(); a.Add(attr.Condition1, b); } if (!b.TryGetValue(attr.Condition2, out c)) { c = new Dictionary <int, IDictionary <string, IDictionary <string, IDictionary <string, object> > > >(); b.Add(attr.Condition2, c); } if (!c.TryGetValue(attr.Condition3, out d)) { d = new Dictionary <string, IDictionary <string, IDictionary <string, object> > >(); c.Add(attr.Condition3, d); } if (!d.TryGetValue(attr.Condition4 ?? string.Empty, out e)) { e = new Dictionary <string, IDictionary <string, object> >(); d.Add(attr.Condition4 ?? string.Empty, e); } if (!e.TryGetValue(attr.Condition5 ?? string.Empty, out f)) { f = new Dictionary <string, object>(); e.Add(attr.Condition5 ?? string.Empty, f); } object hh; if (f.TryGetValue(attr.Condition6 ?? string.Empty, out hh)) { throw new ArgumentException(string.Format("hub: key {0} rep {1}", clazz.FullName, hh.GetType().FullName)); } else { f.Add(attr.Condition6 ?? string.Empty, hub); } } } } }
public static RedisKeyNameAttribute GetAttribute <T>() { return(AttributeUnit.GetAttribute <RedisKeyNameAttribute>(typeof(T))); }
/// <summary> /// 获取一个特性 /// </summary> /// <param name="property">属性</param> /// <returns></returns> public static AdvancedObjectMarshalAsAttribute GetAttribute(PropertyInfo property) { return(AttributeUnit.GetAttribute <AdvancedObjectMarshalAsAttribute>(property)); }