示例#1
0
        private static void Main(string[] args)
        {
            var wsbFile                        = args.Length >= 1 ? args[0] : "Schema.mic";
            var basePathToSolution             = args.Length >= 2 ? args[1] : "../";
            var domainNameSpace                = "Domain";
            var applicationNameSpace           = "Application";
            var sqlAdapterNameSpace            = "SqlAdapter";
            var webAdapterNameSpace            = "HttpAdapter";
            var domainBasePath                 = $"{basePathToSolution}{domainNameSpace}/Generated/";
            var applicationBasePath            = $"{basePathToSolution}{applicationNameSpace}/Generated/";
            var applicationRealClassesBasePath = $"{basePathToSolution}{applicationNameSpace}/";
            var domainRealClassesBasePath      = $"{basePathToSolution}{domainNameSpace}/";
            var sqlAdapterBasePath             = $"{basePathToSolution}{sqlAdapterNameSpace}/Generated/";
            var webAdapterBasePath             = $"{basePathToSolution}{webAdapterNameSpace}/Generated/";
            var asynHostBasePath               = $"{basePathToSolution}AsyncHost";
            var injectionBasePath              = $"{basePathToSolution}Host";

            var tokenizer         = new MicrowaveLanguageTokenizer();
            var parser            = new MicrowaveLanguageParser();
            var domainBuilder     = new DomainWriter(domainBasePath, domainRealClassesBasePath);
            var applicationWriter = new ApplicationWriter(applicationNameSpace, applicationBasePath, applicationRealClassesBasePath);
            var sqlAdapterWriter  = new SqlAdapterWriter(sqlAdapterNameSpace, sqlAdapterBasePath);
            var webAdapterWriter  = new HttpAdapterWriter(webAdapterNameSpace, webAdapterBasePath);
            var dependencyInjectionWriterAsyncHost = new DependencyInjectionBuilderAsyncHost();

            var dependencyInjectionWriter = new DependencyInjectionBuilderHost();

            using (var reader = new StreamReader(wsbFile))
            {
                var content = reader.ReadToEnd();

                var dslParser  = new DslParser(tokenizer, parser);
                var domainTree = dslParser.Parse(content);

                domainBuilder.Write(domainTree, domainBasePath);
                applicationWriter.Write(domainTree);
                sqlAdapterWriter.Write(domainTree);
                webAdapterWriter.Write(domainTree);
                var codeNamespace = dependencyInjectionWriter.Build(domainTree.Classes, domainTree.SynchronousDomainHooks);
                new FileWriter(injectionBasePath).WriteToFile("Base/", codeNamespace);
                var write = dependencyInjectionWriterAsyncHost.Write(domainTree.Classes, domainTree.AsyncDomainHooks);
                new FileWriter(asynHostBasePath).WriteToFile("Base/", write);
            }
        }