Beispiel #1
0
 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;
 }
Beispiel #3
0
        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();
        }
 public HandlerMethodEmittingContext(MyILGenerator il, HandlerClassFieldCache fieldCache)
     : base(il)
 {
     this.fieldCache = fieldCache;
 }