public static Dictionary <string, Task <WcfClientClassInfo> > Create(string wcfClientDir, IDictionary <string, string> serviceGenCodes, Dictionary <string, Task <WcfServiceClassInfo> > wcfServiceClasses) { var fileCodes = SourceCodeAccess.GetClientFilesCode(wcfClientDir); var wcfClasses = fileCodes .Select(async fileCode => { var code = await fileCode; var wcfClassName = await FindWcfClassName(code); var info = new WcfClientClassInfo { ClientClassName = ClientNamesMapper.MapToClientClassName(wcfClassName), ClientNamespace = await GetClientNamespace(code), ClientBaseInterfaceName = ClientNamesMapper.MapToInterfaceName(wcfClassName), WcfClientSourceCode = code, ServiceGenCode = FindServiceGenCode(serviceGenCodes, wcfClassName), WcfServiceClass = await FindWcfServiceClass(wcfServiceClasses, wcfClassName), }; var pair = new { wcfClassName, info, }; return(pair); }) .ToDictionary(pair => { // avoid using task object as key for dictionary so wait to complete var className = pair.Result.wcfClassName; return(className); }, async pair => { var info = (await pair).info; return(info); }); return(wcfClasses); }
public static Dictionary <string, Task <WcfServiceClassInfo> > Create(string wcfServiceDir) { var fileCodes = SourceCodeAccess.GetServiceFilesCode(wcfServiceDir); var wcfClasses = fileCodes .Select(async fileCode => { var code = (await fileCode).code; var wcfClassName = await CodeParser.ParseClassName(code); var info = new WcfServiceClassInfo { ControllerName = ServiceNamesMapper.MapToControllerName(wcfClassName), ControllerNamespace = await GetControllerNamespace(code), WcfServiceSourceCode = code, WcfMethods = await CodeParser.ParseMethodNames(code), IsAsmx = (await fileCode).isAsmx, }; var pair = new { wcfClassName, info, }; return(pair); }) .ToDictionary(pair => { // avoid using task object as key for dictionary so wait to complete var className = pair.Result.wcfClassName; return(className); }, async pair => { var info = (await pair).info; return(info); }); return(wcfClasses); }