예제 #1
0
        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);
        }