public HandlerClassBuildingContext(IReadOnlyList <ServiceDescription> serviceDescriptionChain, MethodDescription methodDescription, TypeBuilder builder, GenericTypeParameterBuilder[] genericTypeParameterBuilders, HandlerClassFieldCache fields) { ServiceDescriptionChain = serviceDescriptionChain; MethodDescription = methodDescription; Builder = builder; GenericTypeParameterBuilders = genericTypeParameterBuilders; Fields = fields; }
public HandlerClassBuildingContext(IReadOnlyList<ServiceDescription> serviceDescriptionChain, MethodDescription methodDescription, TypeBuilder builder, GenericTypeParameterBuilder[] genericTypeParameterBuilders, HandlerClassFieldCache fields) { ServiceDescriptionChain = serviceDescriptionChain; MethodDescription = methodDescription; Builder = builder; GenericTypeParameterBuilders = genericTypeParameterBuilders; Fields = fields; }
private Type CreateType(IReadOnlyList <ServiceDescription> serviceDescriptionChain, MethodDescription methodDescription, ServicePath path) { int disambiguator = Interlocked.Increment(ref classNameDisambiguator); var typeBuilder = moduleBuilder.DefineType("__rpc_handler_" + string.Join(".", path) + "_" + disambiguator, TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.Class, typeof(object), new[] { typeof(IHandler) }); var genericTypeParameterBuilders = methodDescription.GenericParameters.Any() ? typeBuilder.DefineGenericParameters(methodDescription.GenericParameters.Select(x => x.Name).ToArray()) : new GenericTypeParameterBuilder[0]; var fieldCache = new HandlerClassFieldCache(typeBuilder); var classContext = new HandlerClassBuildingContext(serviceDescriptionChain, methodDescription, typeBuilder, genericTypeParameterBuilders, fieldCache); CreateMethodDelegate(classContext); CreateConstructor(classContext); return(typeBuilder.CreateType()); }
public HandlerMethodEmittingContext(MyILGenerator il, HandlerClassFieldCache fieldCache) : base(il) { this.fieldCache = fieldCache; }
private Type CreateType(IReadOnlyList<ServiceDescription> serviceDescriptionChain, MethodDescription methodDescription, ServicePath path) { int disambiguator = Interlocked.Increment(ref classNameDisambiguator); var typeBuilder = moduleBuilder.DefineType("__rpc_handler_" + string.Join(".", path) + "_" + disambiguator, TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.Class, typeof(object), new[] { typeof(IHandler) }); var genericTypeParameterBuilders = methodDescription.GenericParameters.Any() ? typeBuilder.DefineGenericParameters(methodDescription.GenericParameters.Select(x => x.Name).ToArray()) : new GenericTypeParameterBuilder[0]; var fieldCache = new HandlerClassFieldCache(typeBuilder); var classContext = new HandlerClassBuildingContext(serviceDescriptionChain, methodDescription, typeBuilder, genericTypeParameterBuilders, fieldCache); CreateMethodDelegate(classContext); CreateConstructor(classContext); return typeBuilder.CreateType(); }