Ejemplo n.º 1
0
        public Type Generate()
        {
            if (_cachedType == null)
            {
                // constructor
                if (Way == ProxyTypeGenerateWay.ByNewObj)
                {
                    foreach (var cctor in ProxiedType.GetConstructors(BindingFlags.Public | BindingFlags.Instance | BindingFlags.CreateInstance))
                    {
                        new ProxyConstructorEmitter(this).Emit(cctor);
                    }
                }
                else
                {
                    new ProxyConstructorEmitter(this).Emit(null);
                }

                AddMethods(_proxiedInterfaceType, ProxiedType, AddEvents(_proxiedInterfaceType, ProxiedType), AddProperties(_proxiedInterfaceType, ProxiedType));
                foreach (var interfaceType in _proxiedInterfaceType.GetInterfaces())
                {
                    AddMethods(interfaceType, ProxiedType, AddEvents(interfaceType, ProxiedType), AddProperties(interfaceType, ProxiedType));
                }

                _cachedType = Builder.CreateTypeInfo().AsType();
            }
            return(_cachedType);
        }
Ejemplo n.º 2
0
        private void CacheMethods()
        {
            foreach (var method in ProxiedType.GetMethods(BindingFlags.Public | BindingFlags.Instance))
            {
                if (Methods.ContainsKey(method.Name))
                {
                    throw new ApplicationException("This service can not be proxied dynamically since it contains more than one definition for method " + method.Name);
                }

                var apiMethodInfo = new DynamicApiMethodInfo(method.Name, method, FindHttpVerb(method));

                Methods[method.Name] = apiMethodInfo;
            }
        }