private static void AddToProxy(this FieldInfo[] fields, WrapperObject target, IDictionary <String, BaseProxy> proxies, INameSelector selector)
 {
     foreach (var field in fields)
     {
         var name = selector.Select(proxies.Keys, field);
         proxies.Add(name, new FieldProxy(target, field));
     }
 }
 private static void AddToProxy(this ConstructorInfo[] constructors, WrapperObject target, IDictionary <String, BaseProxy> proxies, INameSelector selector)
 {
     if (constructors.Length > 0)
     {
         var name = selector.Select(proxies.Keys, constructors[0]);
         proxies[name] = new ConstructorProxy(target, constructors);
     }
 }
 private static void AddToProxy(this MethodInfo[] methods, WrapperObject target, IDictionary <String, BaseProxy> proxies, INameSelector selector)
 {
     foreach (var method in methods.Where(m => !m.IsSpecialName).GroupBy(m => m.Name))
     {
         var overloads = method.ToArray();
         var name      = selector.Select(proxies.Keys, overloads[0]);
         proxies.Add(name, new MethodProxy(target, overloads));
     }
 }
 public static Object Call(this ConstructorInfo ctor, WrapperObject obj, Object[] arguments)
 {
     try
     {
         return(ctor.Invoke(arguments).WrapObject());
     }
     catch (TargetInvocationException ex)
     {
         throw ex.InnerException;
     }
 }
        public static Object Call(this MethodBase method, WrapperObject obj, Object[] arguments)
        {
            try
            {
                var target = obj.Content;
                var result = method.Invoke(target, arguments);

                if (Object.ReferenceEquals(result, target))
                {
                    return(obj);
                }

                return(result.WrapObject());
            }
            catch (TargetInvocationException ex)
            {
                throw ex.InnerException;
            }
        }
        private static void AddToProxy(this PropertyInfo[] properties, WrapperObject target, IDictionary <String, BaseProxy> proxies, INameSelector selector)
        {
            var indices = new List <PropertyInfo>();

            foreach (var property in properties)
            {
                if (property.GetIndexParameters().Length == 0)
                {
                    var name = selector.Select(proxies.Keys, property);
                    proxies.Add(name, new PropertyProxy(target, property));
                }
                else
                {
                    indices.Add(property);
                }
            }

            if (indices.Count > 0)
            {
                var name = selector.Select(proxies.Keys, indices[0]);
                proxies[name] = new IndexProxy(target, indices.ToArray());
            }
        }
Ejemplo n.º 7
0
 public static WrapperObject Expose(this Type type) => WrapperObject.CreateFor(type);
Ejemplo n.º 8
0
 public static WrapperObject Expose(this Type type)
 {
     return(WrapperObject.CreateFor(type));
 }
        public static Dictionary <String, BaseProxy> GetMemberProxies(this Type type, WrapperObject target)
        {
            var proxies    = new Dictionary <String, BaseProxy>();
            var flags      = BindingFlags.Public | BindingFlags.Instance;
            var fields     = type.GetFields(flags);
            var properties = type.GetProperties(flags);
            var methods    = type.GetMethods(flags);
            var selector   = Container.GetService <INameSelector>(CamelNameSelector.Instance);

            fields.AddToProxy(target, proxies, selector);
            properties.AddToProxy(target, proxies, selector);
            methods.AddToProxy(target, proxies, selector);

            return(proxies);
        }