/// <summary> /// Creates a contract from the specified description. /// </summary> /// <param name="description">The description to create a contract from.</param> /// <returns>A <see cref="ContractDescription"/>.</returns> private ContractDescription CreateContract(DomainServiceDescription description) { Type domainServiceType = description.DomainServiceType; // PERF: We should consider just looking at [ServiceDescription] directly. ServiceDescription serviceDesc = ServiceDescription.GetService(domainServiceType); // Use names from [ServiceContract], if specified. ServiceContractAttribute sca = TypeDescriptor.GetAttributes(domainServiceType)[typeof(ServiceContractAttribute)] as ServiceContractAttribute; if (sca != null) { if (!String.IsNullOrEmpty(sca.Name)) { serviceDesc.Name = sca.Name; } if (!String.IsNullOrEmpty(sca.Namespace)) { serviceDesc.Name = sca.Namespace; } } ContractDescription contractDesc = new ContractDescription(serviceDesc.Name + this.Name, serviceDesc.Namespace) { ConfigurationName = serviceDesc.ConfigurationName + this.Name, ContractType = domainServiceType }; // Add domain service behavior which takes care of instantiating DomainServices. ServiceUtility.EnsureBehavior <DomainServiceBehavior>(contractDesc); // Load the ContractDescription from the DomainServiceDescription. ServiceUtility.LoadContractDescription(contractDesc, description); return(contractDesc); }