示例#1
0
        //internal static ICollection<Aspect> GetAspectsByOwner(object owner)
        //{
        //    // проходим все существующие аспекты
        //    // если будет медленно, то нужно будет в базовый класс аспекта добавить список включённых аспектов
        //    lock (syncObj)
        //    {
        //        LinkedList<Aspect> result = new LinkedList<Aspect>();
        //        foreach (KeyValuePair<Type, LinkedList<Aspect>> list in aspects)
        //        {
        //            foreach (Aspect aspect in list.Value)
        //            {
        //                if (owner.Equals(aspect))
        //                    result.AddLast(aspect);
        //            }
        //        }
        //        return result;
        //    }
        //}
        internal static void AddAspect(Aspect aspect)
        {
            Type type = aspect.GetType();

            lock (syncObj)
            {
                if (aspects.ContainsKey(type))
                {
                    LinkedList<Aspect> list = aspects[type];
                    if (!list.Contains(aspect))
                        list.AddLast(aspect);
                }
                else
                {
                    LinkedList<Aspect> newlist = new LinkedList<Aspect>();
                    newlist.AddFirst(aspect);
                    aspects.Add(type, newlist);
                }
            }
        }
示例#2
0
 internal static void RemoveAspect(Aspect aspect)
 {
     Type type = aspect.GetType();
     lock (syncObj)
     {
         if (aspects.ContainsKey(type))
             aspects[type].Remove(aspect);
     }
 }