Пример #1
0
        public static void Unregister(this IObjectExtender <object> obj, string eventName)
        {
            var instance = obj.Instance;

            if (!instancesEventsDictionary.ContainsKey(instance))
            {
                return;
            }

            if (!instancesEventsDictionary[instance].ContainsKey(eventName))
            {
                return;
            }

            var type     = instance.GetType();
            var eventObj = type.GetEvent(eventName);

            var message = $"The type {type.Name} does not contain an event with the specified name {eventName}.";

            var delegateObj = instancesEventsDictionary[instance][eventName];

            eventObj.RemoveEventHandler(instance, delegateObj);

            instancesEventsDictionary[instance].Remove(eventName);

            if (instancesEventsDictionary[instance].Count == 0)
            {
                instancesEventsDictionary.Remove(instance);
            }
        }
Пример #2
0
        private static IEnumerable <object> GetFlatternChildren <T>(
            this IObjectExtender <T> root, ICollection <object> list, Predicate <Type> predicate)
        {
            var instance = root.Instance;

            if (list.Contains(instance))
            {
                return(Enumerable.Empty <object>());
            }

            const BindingFlags InstanceMembers = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;

            var properties = instance.GetType().GetProperties(InstanceMembers);
            var fields     = instance.GetType().GetFields(InstanceMembers);

            var filteredProperties =
                properties
                .Where(item => predicate(item.PropertyType))
                .Select(item => item.GetValue(instance, null))
                .SelectMany(item => item.Extend().GetEnumerable())
                .Where(item => item != null && !item.Equals(instance));

            var filteredFields =
                fields
                .Where(item => predicate(item.FieldType))
                .Select(item => item.GetValue(instance))
                .SelectMany(item => item.Extend().GetEnumerable())
                .Where(item => item != null && !item.Equals(instance));

            AddChildren(list, predicate, filteredProperties);
            AddChildren(list, predicate, filteredFields);

            return(list);
        }
Пример #3
0
 public BuildUpObjectBuilder(object instance, IContainerContext containerContext, IContainerExtensionManager containerExtensionManager, IObjectExtender objectExtender)
 {
     this.instance = instance;
     this.instanceType = instance.GetType();
     this.containerExtensionManager = containerExtensionManager;
     this.objectExtender = objectExtender;
     this.containerContext = containerContext;
 }
Пример #4
0
        public static void OnTrueExecute(this IObjectExtender <bool> value, Action action)
        {
            if (!value.Instance)
            {
                return;
            }

            action();
        }
Пример #5
0
        public static void OnNotDefault <T>(this IObjectExtender <T> obj, Action <T> action) where T : class
        {
            var instance = obj.Instance;

            if (instance.IsDefault())
            {
                return;
            }

            action(instance);
        }
Пример #6
0
        public ExtendedPropertyDescriptor(PropertyDescriptor descriptor, object component)
            : base(descriptor)
        {
            IObjectExtender objectExtender = component as IObjectExtender;

            if (objectExtender != null)
            {
                element = objectExtender.ModelElement;
            }

            this.descriptor = descriptor;
            this.instance   = component;
        }
        /// <summary>
        /// Creates the object extender.
        /// </summary>
        /// <param name="extensionProvider">The extension provider.</param>
        /// <returns></returns>
        public object CreateObjectExtender(Extension.IExtensionProvider extensionProvider, ModelElement modelElement)
        {
            Guard.ArgumentNotNull(extensionProvider, "extensionProvider");

            Type objectExtenderType = GetObjectExtenderType(extensionProvider, this.extensibleObject.GetType());

            if (objectExtenderType == null)
            {
                return(null);
            }

            if (extensibleObject.ObjectExtenderContainer == null)
            {
                CreateObjectExtenderContainer();
            }

            IObjectExtender objectExtender = GetObjectExtender(extensionProvider) as IObjectExtender;

            // reset container to avoid cloning containers on copy/paste operations
            if (objectExtender != null &&
                objectExtender.ModelElement != null &&
                objectExtender.ModelElement != modelElement)
            {
                CreateObjectExtenderContainer();
                objectExtender = null;
            }

            if (objectExtender == null)
            {
                try
                {
                    objectExtender = Activator.CreateInstance(objectExtenderType) as IObjectExtender;
                    this.extensibleObject.ObjectExtenderContainer.ObjectExtenders.Add(objectExtender);
                }
                catch (Exception ex)
                {
                    Logger.Write(ex);
                }
            }

            if (objectExtender.ModelElement == null)
            {
                IObjectExtenderInternal objectExtenderInternal = objectExtender as IObjectExtenderInternal;
                if (objectExtenderInternal != null)
                {
                    objectExtenderInternal.ModelElement = modelElement;
                }
            }

            return(objectExtender);
        }
Пример #8
0
        public static IEnumerable <object> GetEnumerable <T>(this IObjectExtender <T> obj)
        {
            var collection = obj.Instance as IEnumerable;

            if (collection == null)
            {
                yield return(obj);

                yield break;
            }

            foreach (var item in collection)
            {
                yield return(item);
            }
        }
Пример #9
0
        public static TEventHandler Register <TEventHandler>(this IObjectExtender <object> obj, TEventHandler action)
        {
            var instance = obj.Instance;

            var eventType = typeof(TEventHandler);

            var eventName =
                instance
                .GetType()
                .GetEvents()
                .Single(eventObj => eventObj.EventHandlerType == eventType).Name;

            if (!instancesEventsDictionary.ContainsKey(obj))
            {
                instancesEventsDictionary
                .Add(instance, new Dictionary <string, Delegate>());
            }

            var eventDictionary = instancesEventsDictionary[instance];

            eventDictionary.Add(eventName, (Delegate)(object)action);

            return(action);
        }
Пример #10
0
 public static IEnumerable <object> GetFlatternChildren <T>(this IObjectExtender <T> root, Predicate <Type> predicate)
 {
     return(GetFlatternChildren(root, new HashSet <object>(), predicate));
 }
Пример #11
0
 public static IEnumerable <object> GetFlatternChildren <T>(this IObjectExtender <T> root)
     where T : class
 {
     return(GetFlatternChildren(root, type => type.IsPrimitiveType() || type.IsEnumerableOf <T>()));
 }
Пример #12
0
 private FactoryObjectBuilder(IContainerContext containerContext, IContainerExtensionManager containerExtensionManager, IObjectExtender objectExtender)
 {
     this.containerExtensionManager = containerExtensionManager;
     this.objectExtender = objectExtender;
     this.containerContext = containerContext;
 }
Пример #13
0
 public FactoryObjectBuilder(Func<object, object, object, object> threeParamsFactory, IContainerContext containerContext, IContainerExtensionManager containerExtensionManager, IObjectExtender objectExtender)
     : this(containerContext, containerExtensionManager, objectExtender)
 {
     this.threeParamsFactory = threeParamsFactory;
 }
Пример #14
0
 public FactoryObjectBuilder(Func<object> factory, IContainerContext containerContext, IContainerExtensionManager containerExtensionManager, IObjectExtender objectExtender)
     : this(containerContext, containerExtensionManager, objectExtender)
 {
     this.singleFactory = factory;
 }
Пример #15
0
 public static bool HasHandlers(this IObjectExtender <object> obj)
 {
     return(instancesEventsDictionary.ContainsKey(obj.Instance));
 }