/// <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);
                        }
                    }
                }
            }
        }
Example #2
0
        public async Task AddAttributeUnitAsync(AttributeUnitDto unit, CancellationToken cancellationToken = default(CancellationToken))
        {
            var a = new AttributeUnit
            {
                Name = unit.Name,
            };

            try
            {
                _dbContext.Add(a);
                await _dbContext.SaveChangesAsync(cancellationToken);
            }
            catch (DbUpdateException ex)
            {
                throw new InvalidItemException(a, ex);
            }
        }
Example #3
0
        public async Task DeleteAttributeUnitAsync(int unitId, CancellationToken cancellationToken = default(CancellationToken))
        {
            var attribute = new AttributeUnit
            {
                Id = unitId
            };

            _dbContext.Attach(attribute).State = EntityState.Deleted;

            try
            {
                await _dbContext.SaveChangesAsync(cancellationToken);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                throw new ItemNotFoundException(unitId, "Attribute unit", ex);
            }
        }
Example #4
0
        public async Task UpdateAttributeUnitAsync(int unitId, AttributeUnitDto unit, CancellationToken cancellationToken = default(CancellationToken))
        {
            var b = new AttributeUnit
            {
                Id   = unitId,
                Name = unit.Name
            };

            _dbContext.Attach(b).State = EntityState.Modified;

            try
            {
                await _dbContext.SaveChangesAsync(cancellationToken);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                throw new ItemNotFoundException(unitId, "Attribute unit", ex);
            }
            catch (DbUpdateException ex)
            {
                throw new InvalidItemException(b, ex);
            }
        }
Example #5
0
 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));
 }