Пример #1
0
            void Visit(ContractDescription contractDescription)
            {
                bool isDuplex = IsDuplex(contractDescription);

                this.contractMemberScope = new UniqueCodeIdentifierScope();
                this.callbackMemberScope = isDuplex ? new UniqueCodeIdentifierScope() : null;

                UniqueCodeNamespaceScope codeNamespaceScope = new UniqueCodeNamespaceScope(parent.NamespaceManager.EnsureNamespace(contractDescription.Namespace));

                CodeTypeDeclaration contract          = typeFactory.CreateInterfaceType();
                CodeTypeReference   contractReference = codeNamespaceScope.AddUnique(contract, contractDescription.CodeName, Strings.DefaultContractName);

                CodeTypeDeclaration callbackContract          = null;
                CodeTypeReference   callbackContractReference = null;

                if (isDuplex)
                {
                    callbackContract          = typeFactory.CreateInterfaceType();
                    callbackContractReference = codeNamespaceScope.AddUnique(callbackContract, contractDescription.CodeName + Strings.CallbackTypeSuffix, Strings.DefaultContractName);
                }

                this.context                             = new ServiceContractGenerationContext(parent, contractDescription, contract, callbackContract);
                this.context.Namespace                   = codeNamespaceScope.CodeNamespace;
                this.context.TypeFactory                 = this.typeFactory;
                this.context.ContractTypeReference       = contractReference;
                this.context.DuplexCallbackTypeReference = callbackContractReference;

                AddServiceContractAttribute(this.context);
            }