Beispiel #1
0
        protected CodeBuilder(ICodeBuilderNames codeBuilderNames)
        {
            this.codeBuilderNames = codeBuilderNames;

            this.methodBodyTypesBuildResultMap  = new Dictionary <Type, MethodBodyTypesBuildResult>();
            this.methodDispatcherBuildResultMap = new Dictionary <Type, MethodDispatcherBuildResult>();
            this.proxyGeneratorBuildResultMap   = new Dictionary <Type, ProxyGeneratorBuildResult>();
        }
Beispiel #2
0
        public ActorCodeBuilder(ICodeBuilderNames codeBuilderNames)
        {
            this.codeBuilderNames = codeBuilderNames;

            this.methodBodyTypesBuildResultMap  = new Dictionary <Type, MethodBodyTypesBuildResult>();
            this.methodDispatcherBuildResultMap = new Dictionary <Type, MethodDispatcherBuildResult>();
            this.proxyGeneratorBuildResultMap   = new Dictionary <Type, ActorProxyGeneratorBuildResult>();

            this.methodBodyTypesBuilder  = new MethodBodyTypesBuilder(this);
            this.methodDispatcherBuilder = new MethodDispatcherBuilder <ActorMethodDispatcherBase>(this);
            this.proxyGeneratorBuilder   = new ActorProxyGeneratorBuilder(this);
        }
        private static Type BuildResponseBodyType(
            ICodeBuilderNames codeBuilderNames,
            CodeBuilderContext context,
            MethodDescription methodDescription)
        {
            var responseBodyTypeBuilder = CodeBuilderUtils.CreateDataContractTypeBuilder(
                moduleBuilder: context.ModuleBuilder,
                ns: context.AssemblyNamespace,
                typeName: codeBuilderNames.GetResponseBodyTypeName(methodDescription.Name),
                dcNamespace: codeBuilderNames.GetDataContractNamespace());

            var returnDataType = methodDescription.ReturnType.GetGenericArguments()[0];

            CodeBuilderUtils.AddDataMemberField(
                dcTypeBuilder: responseBodyTypeBuilder,
                fieldType: returnDataType,
                fieldName: codeBuilderNames.RetVal);

            return(responseBodyTypeBuilder.CreateTypeInfo().AsType());
        }
        private static Type BuildRequestBodyType(
            ICodeBuilderNames codeBuilderNames,
            CodeBuilderContext context,
            MethodDescription methodDescription)
        {
            var requestBodyTypeBuilder = CodeBuilderUtils.CreateDataContractTypeBuilder(
                moduleBuilder: context.ModuleBuilder,
                ns: context.AssemblyNamespace,
                typeName: codeBuilderNames.GetRequestBodyTypeName(methodDescription.Name),
                dcNamespace: codeBuilderNames.GetDataContractNamespace());

            foreach (var argument in methodDescription.Arguments)
            {
                CodeBuilderUtils.AddDataMemberField(
                    dcTypeBuilder: requestBodyTypeBuilder,
                    fieldType: argument.ArgumentType,
                    fieldName: argument.Name);
            }

            return(requestBodyTypeBuilder.CreateTypeInfo().AsType());
        }
        private static MethodBodyTypes Build(
            ICodeBuilderNames codeBuilderNames,
            CodeBuilderContext context,
            MethodDescription methodDescription)
        {
            var methodDataTypes = new MethodBodyTypes()
            {
                RequestBodyType              = null,
                ResponseBodyType             = null,
                HasCancellationTokenArgument = methodDescription.HasCancellationToken,
            };

            if ((methodDescription.Arguments != null) && (methodDescription.Arguments.Length != 0))
            {
                methodDataTypes.RequestBodyType = BuildRequestBodyType(codeBuilderNames, context, methodDescription);
            }

            if (TypeUtility.IsTaskType(methodDescription.ReturnType) && methodDescription.ReturnType.GetTypeInfo().IsGenericType)
            {
                methodDataTypes.ResponseBodyType = BuildResponseBodyType(codeBuilderNames, context, methodDescription);
            }

            return(methodDataTypes);
        }