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); }
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; } }