private IServiceMap AddServiceMap(XName qualifiedName) { var operationDefinition = GetOperationDefinition(contractAssembly, qualifiedName); if (operationDefinition == null || qualifiedName.NamespaceName != operationDefinition.Name.NamespaceName) { throw XRoadException.UnknownOperation(qualifiedName); } var requestValueDefinition = schemaDefinitionProvider.GetRequestValueDefinition(operationDefinition); var inputTypeMap = GetContentDefinitionTypeMap(requestValueDefinition, null); var outputTuple = GetReturnValueTypeMap(operationDefinition); var responseValueDefinition = outputTuple.Item1; var outputTypeMap = outputTuple.Item2; var serviceMap = (IServiceMap)Activator.CreateInstance( operationDefinition.ServiceMapType, this, operationDefinition, requestValueDefinition, responseValueDefinition, inputTypeMap, outputTypeMap ); return(serviceMaps.GetOrAdd(qualifiedName, serviceMap)); }