Example #1
0
        public static void GAssemblyGroupCommonFinalizer(IGAssemblyGroupBasicConstructorResult gAssemblyGroupBasicConstructorResult)
        {
            //#region Lookup the Base GAssemblyUnit, GCompilationUnit, GNamespace, GClass, and primary GConstructor,  GCompilationUnit gCompilationUnitDerived
            //var titularBaseClassName = $"{GAssemblyGroup.GName}Base";
            //var titularAssemblyUnitLookupPrimaryConstructorResults = LookupPrimaryConstructorMethod(new List<IGAssemblyGroup>(){GAssemblyGroup},gClassName:titularBaseClassName) ;
            //#endregion
            //#region Lookup the Derived GAssemblyUnit, GCompilationUnit, GNamespace, and GClass
            //var titularClassName = $"{GAssemblyGroup.GName}";
            //var titularAssemblyUnitLookupDerivedClassResults = LookupDerivedClass(new List<IGAssemblyGroup>(){GAssemblyGroup},gClassName:titularClassName) ;
            //#endregion
            #region Create Derived Constructors for all public Base Constructors
            // Create a constructor in the Titular class for every public constructor in the Titular Base class
            var baseConstructorsList = new List <IGMethod>();
            baseConstructorsList.AddRange(gAssemblyGroupBasicConstructorResult.GClassBase.CombinedConstructors());
            foreach (var bc in baseConstructorsList)
            {
                var gConstructor = new GMethod(new GMethodDeclaration(gAssemblyGroupBasicConstructorResult.GClassDerived.GName, isConstructor: true,
                                                                      gVisibility: "public", gArguments: bc.GDeclaration.GArguments, gBase: bc.GDeclaration.GArguments.ToBaseString()));
                gAssemblyGroupBasicConstructorResult.GClassDerived.GMethods.Add(gConstructor.Id, gConstructor);
            }
            #endregion
            #region Constructor Groups
            // ToDo handle method groups, will require a change to CombinedConstructors
            #endregion
            #region Condense GUsings in the Base and Derived GCompilationUnits of the Titular Assembly
            #endregion
            #region Condense GItemGroups in the GProjectUnit of the Titular Assembly
            #endregion
            #region Finalize the Statemachine
            //(
            //  IEnumerable<GAssemblyUnit> gAssemblyUnits,
            //  IEnumerable<GCompilationUnit> gCompilationUnits,
            //  IEnumerable<GNamespace> gNamespacess,
            //  IEnumerable<GClass> gClasss,
            //  IEnumerable<GMethod> gMethods) lookupResultsTuple = LookupPrimaryConstructorMethod();
            //MStateMachineFinalizer( GClassBase);
            //MStateMachineFinalizer(GTitularBaseCompilationUnit, gNamespace, GClassBase, gConstructorBase, gStateConfigurations);
            //MStateMachineFinalizer(  GClassBase, gConstructorBase, gStateConfigurations);
            MStateMachineFinalizer(gAssemblyGroupBasicConstructorResult);

            #endregion
            #region Populate Interfaces for Titular Derived and Base Class
            PopulateInterface(gAssemblyGroupBasicConstructorResult.GClassDerived, gAssemblyGroupBasicConstructorResult.GTitularInterfaceDerivedInterface);
            PopulateInterface(gAssemblyGroupBasicConstructorResult.GClassBase, gAssemblyGroupBasicConstructorResult.GTitularInterfaceBaseInterface);
            #endregion
            #region populate the Interfaces CompilationUnits for additional classes found in the Titular Derived and Base CompilationUnits
            #endregion
            #region Condense GUsings in the Base and Derived GCompilationUnits of the Titular Interfaces Assembly
            #endregion
            #region Condense GItemGroups in the GProjectUnit of the Titular Interfaces Assembly
            #endregion
        }
 public static void GAssemblyGroupGHBSFinalizer(IGAssemblyGroupBasicConstructorResult mCreateAssemblyGroupResult)
 {
     //#region Lookup the Base GAssemblyUnit, GCompilationUnit, GNamespace, GClass, and primary GConstructor
     //var titularBaseClassName = $"{GAssemblyGroup.GName}Base";
     //var titularAssemblyUnitLookupPrimaryConstructorResults = LookupPrimaryConstructorMethod(new List<IGAssemblyGroup>(){GAssemblyGroup},gClassName:titularBaseClassName) ;
     //#endregion
     //#region Lookup the Derived GAssemblyUnit, GCompilationUnit, GNamespace, and GClass
     //var titularClassName = $"{GAssemblyGroup.GName}";
     //var titularAssemblyUnitLookupDerivedClassResults = LookupDerivedClass(new List<IGAssemblyGroup>(){GAssemblyGroup},gClassName:titularClassName) ;
     //#endregion
     // No Additional work needed, call CommonFinalizer
     GAssemblyGroupCommonFinalizer(mCreateAssemblyGroupResult);
 }
 public static void GAssemblyGroupGHHSFinalizer(IGAssemblyGroupBasicConstructorResult gAssemblyGroupBasicConstructorResult)
 {
     //#region Lookup the Base GAssemblyUnit, GCompilationUnit, GNamespace, GClass, and primary GConstructor
     //var titularBaseClassName = $"{GAssemblyGroup.GName}Base";
     //var titularAssemblyUnitLookupPrimaryConstructorResults = LookupPrimaryConstructorMethod(new List<IGAssemblyGroup>() {GAssemblyGroup}, gClassName: titularBaseClassName);
     //var GClassBase = titularAssemblyUnitLookupPrimaryConstructorResults.gClasss.First();
     //#endregion
     //#region Lookup the Derived GAssemblyUnit, GCompilationUnit, GNamespace, and GClass
     //var titularClassName = $"{GAssemblyGroup.GName}";
     //var titularAssemblyUnitLookupDerivedClassResults = LookupDerivedClass(new List<IGAssemblyGroup>() {GAssemblyGroup}, gClassName: titularClassName);
     //var GClassDerived = titularAssemblyUnitLookupDerivedClassResults.gClasss.First();
     //#endregion
     //#region Lookup the Interfaces
     //var titularInterfaceDerivedName = $"I{GAssemblyGroup.GName}";
     //var titularAssemblyUnitLookupDerivedInterfacesResults = LookupInterfaces(new List<IGAssemblyGroup>() {GAssemblyGroup}, gInterfaceName: titularInterfaceDerivedName);
     //var gInterfaceDerived = titularAssemblyUnitLookupDerivedInterfacesResults.gInterfaces.First();
     //var titularInterfaceBaseName = $"I{GAssemblyGroup.GName}";
     //var titularAssemblyUnitLookupBaseInterfacesResults = LookupInterfaces(new List<IGAssemblyGroup>() {GAssemblyGroup}, gInterfaceName: titularInterfaceBaseName);
     //var gInterfaceBase = titularAssemblyUnitLookupBaseInterfacesResults.gInterfaces.First();
     //#endregion
     // No Additional work needed, call CommonFinalizer
     GAssemblyGroupCommonFinalizer(gAssemblyGroupBasicConstructorResult);
 }
        //public static void MStateMachineFinalizer(
        //  (
        //    IEnumerable<GAssemblyUnit> gAssemblyUnits,
        //    IEnumerable<GCompilationUnit> gCompilationUnits,
        //    IEnumerable<GNamespace> gNamespacess,
        //    IEnumerable<GClass> gClasss,
        //    IEnumerable<GMethod> gMethods) lookupResults) {

        //  MStateMachineFinalizer(lookupResults.gCompilationUnits.First(), lookupResults.gNamespacess.First(),
        //    lookupResults.gClasss.First(), lookupResults.gMethods.First(), finalGStateConfigurations);
        //}
        //public static void MStateMachineFinalizer() {
        //  MStateMachineFinalizer(mCreateAssemblyGroupResult.GTitularBaseCompilationUnit,
        //    mCreateAssemblyGroupResult.GNamespaceBase, mCreateAssemblyGroupResult.GClassBase,
        //    gStateConfiguration: mCreateAssemblyGroupResult.GPrimaryConstructorBase.GStateConfigurations);
        //}
        public static void MStateMachineFinalizer(IGAssemblyGroupBasicConstructorResult mCreateAssemblyGroupResult)
        {
            #region Accumulate the StateConfigurations
            var finalGStateConfiguration = new GStateConfiguration();
            foreach (var gAU in mCreateAssemblyGroupResult.GAssemblyGroup.GAssemblyUnits)
            {
                // finalGStateConfigurations.Add(gAu.GStateConfiguration);
                foreach (var gCU in gAU.Value.GCompilationUnits)
                {
                    // finalGStateConfigurations.Add(gCu.GStateConfiguration);
                    foreach (var gNs in gCU.Value.GNamespaces)
                    {
                        // finalGStateConfigurations.Add(gNs.GStateConfiguration);
                        foreach (var gCl in gNs.Value.GClasss)
                        {
                            // finalGStateConfigurations.Add(gCl.GStateConfiguration);
                            foreach (var gMe in gCl.Value.CombinedMethods())
                            {
                                finalGStateConfiguration.GDOTGraphStatements.AddRange(gMe.GStateConfiguration.GDOTGraphStatements);
                            }
                        }
                    }
                }
            }
            #endregion
            if (finalGStateConfiguration.GDOTGraphStatements.Any())
            {
                //var parsedDiGraph = ParseDiGraphToStateMachine(finalGStateConfiguration);
                ParseDiGraphToStateMachine(finalGStateConfiguration);
                #region StateMachine EnumerationGroups
                var gEnumerationGroup = new GEnumerationGroup(gName: "State and Trigger Enumerations for StateMachine");
                #region State Enumeration
                #region State Enumeration members
                var gEnumerationMemberList = new List <IGEnumerationMember>();
                var enumerationValue       = 1;
                foreach (var name in finalGStateConfiguration.GStateNames)
                {
                    gEnumerationMemberList.Add(LocalizableEnumerationMember(name, enumerationValue++));
                }
                // gEnumerationMemberList = new List<IGEnumerationMember>() {
                //  LocalizableEnumerationMember("WaitingForInitialization",1,"Power-On State - waiting until minimal initialization condition has been met","Waiting For Initialization"),
                //  LocalizableEnumerationMember("InitiateContact",1,"Signal to the Console Monitor that we are a valid ConsoleSource","Initiate Contact"),
                //};
                var gEnumerationMembers = new Dictionary <IPhilote <IGEnumerationMember>, IGEnumerationMember>();
                foreach (var o in gEnumerationMemberList)
                {
                    gEnumerationMembers.Add(o.Philote, o);
                }
                #endregion
                var gEnumeration = new GEnumeration(gName: "State", gVisibility: "public", gInheritance: "",
                                                    gEnumerationMembers: gEnumerationMembers);
                #endregion
                gEnumerationGroup.GEnumerations.Add(gEnumeration.Philote, gEnumeration);
                #region Trigger Enumeration
                #region Trigger Enumeration members
                gEnumerationMemberList = new List <IGEnumerationMember>();
                enumerationValue       = 1;
                foreach (var name in finalGStateConfiguration.GTriggerNames)
                {
                    gEnumerationMemberList.Add(LocalizableEnumerationMember(name, enumerationValue++));
                }
                //gEnumerationMemberList = new List<IGEnumerationMember>() {
                //  LocalizableEnumerationMember("InitializationCompleteReceived",1,"The minimal initialization conditions have been met","Initialization Complete Received"),
                //};
                gEnumerationMembers =
                    new Dictionary <IPhilote <IGEnumerationMember>, IGEnumerationMember
                                    >(); //{gEnumerationMemberList.ForEach(m=>m.Philote,m)};
                foreach (var o in gEnumerationMemberList)
                {
                    gEnumerationMembers.Add(o.Philote, o);
                }
                #endregion
                gEnumeration =
                    new GEnumeration(gName: "Trigger", gVisibility: "public", gInheritance: "",
                                     gEnumerationMembers: gEnumerationMembers);
                gEnumerationGroup.GEnumerations.Add(gEnumeration.Philote, gEnumeration);
                #endregion
                mCreateAssemblyGroupResult.GNamespaceBase.AddEnumerationGroup(gEnumerationGroup);
                #endregion

                //#region StateMachine Transitions Static variable
                //// Add a StaticVariable to the class
                //List<string> gStatements = new List<string>() {"new List<StateConfiguration>(){"};
                //foreach (var sc in parsedDiGraph.StateConfigurations) {
                //  gStatements.Add(sc);
                //}
                //gStatements.Add("}");
                //var gStaticVariable = new GStaticVariable("stateConfigurations", gType: "List<StateConfiguration>",
                //  gBody: new GBody(gStatements));
                //gClass.GStaticVariables.Add(gStaticVariable.Philote, gStaticVariable);
                //#endregion

                #region Create the detailed ConfigureStateMachine Method using the parsedDiGraph information
                // add a method to the class that configures the StateMachine according to the StateConfigurations parsed from the diGraph
                var gMethodGroup = new GMethodGroup(gName: "Detailed ConfigureStateMachine Method");
                var gBody        = new GBody(new List <string>());
                var gMethod      =
                    new GMethod(
                        new GMethodDeclaration(gName: "ConfigureStateMachine", gType: "void", gVisibility: "private",
                                               gAccessModifier: ""), gBody);
                //"// attribution :https://github.com/dhrobbins/ApprovaFlow/blob/master/ApprovaFlow/ApprovaFlow/ApprovaFlow/Workflow/WorkflowProcessor.cs",
                //"// attribution :https://github.com/frederiksen/Stateless-Designer/blob/master/src/StatelessDesigner.VS2017/StatelessCodeGenerator/StatelessCodeGenerator.cs",
                //"// Heavily modified to work in a code generator",
                //"",
                //gBody.GStatements.Add(
                // "#region Delegates for each state's Entry and Exit method calls, and GuardClauses method calls");
                foreach (var stateName in finalGStateConfiguration.GStateNames)
                {
                    gBody.GStatements.Add($"StateMachine.Configure(State.{stateName})");
                    var permittedStateTransitions = finalGStateConfiguration.GDiGraphStates.Where(x => x.state == stateName)
                                                    .Select(x => (triggerName: x.trigger, nextStateName: x.nextstate));
                    foreach (var pST in permittedStateTransitions)
                    {
                        gBody.GStatements.Add($"  .Permit(Trigger.{pST.triggerName},State.{pST.nextStateName})");
                    }
                    gBody.GStatements.Add($";");
                    //    $"public EntryExitDelegate On{stateName}Entry = null;",
                    //    $"public EntryExitDelegate On{stateName}Exit = null;",
                }
                ;
                //}
                //gBody.GStatements.Add("#endregion");
//gBody.GStatements.Add("#region Fluent");
                //foreach (var stateConfiguration in parsedDiGraph.StateConfigurations) {
                //  //gBody.GStatements. Add("StateMachine.Configure($State},");
                //  //  if (true) // stateName == stateConfiguration) {
                //  //    gBody.GStatements.Add($"#endregion");
                //}
                // gBody.GStatements.Add("#endregion");

                //gBody.GStatements.AddRange(
                //  "#region Delegates for each state's Entry and Exit method calls, and GuardClauses method calls",
                //  "#endregion "
                //  );

                //"//  Get a distinct list of states with a trigger from the stateConfigurations static variable",
                //"//  State => Trigger => TargetState",
                //"var states = StateConfigurations.AsQueryable()",
                //".Select(x => x.State)",
                //".Distinct()",
                //".Select(x => x)",
                //".ToList();",
                //"//  Get each trigger for each state",
                //"states.ForEach(state =>{",
                //"var triggers = StateConfigurations.AsQueryable()",
                //".Where(config => config.State == state)",
                //".Select(config => new { Trigger = config.Trigger, TargetState = config.NextState })",
                //".ToList();",
                //"triggers.ForEach(trig => {",
                //"StateMachine.Configure(state).Permit(trig.Trigger, trig.TargetState);",
                //"  });",
                //"});",
                #endregion
                gMethodGroup.GMethods.Add(gMethod.Philote, gMethod);
                mCreateAssemblyGroupResult.GClassBase.GMethodGroups.Add(gMethodGroup.Philote, gMethodGroup);
                #region Add the statement that fires the InitializationCompleteReceived Trigger
                //var statementList = gClass.CombinedMethods().Where(x => x.GDeclaration.GName == "StartAsync").First().GBody
                //  .GStatements;
                //statementList.Insert(statementList.Count - 1, "StateMachine.Fire(Trigger.InitializationCompleteReceived);");
                #endregion
            }
        }
        //#region Titular Base Class (IHostedService)
        //  GClass gClass = new GClass(gCompilationUnitName, gVisibility: "public",
        //    gInheritance: "BackgroundService",
        //    gImplements: new List<string> { "IDisposable" },
        //    gDisposesOf: new List<string> { "SubscriptionToConsoleReadLineAsyncAsObservableDisposeHandle" });
        //  #region specific methods for BackgroundService
        //  gClass.AddMethod(MCreateExecuteAsyncMethod(gAccessModifier: "override async"));
        //  gClass.AddMethodGroup(MCreateStartStopAsyncMethods(gAccessModifier: "override async"));
        //  #endregion
        //  #region Constructors
        //  gConstructor = new GMethod(new GMethodDeclaration(gCompilationUnitName, isConstructor: true,
        //    gVisibility: "public"));
        //  gClass.GMethods.Add(gConstructor.Philote,gConstructor);
        //  #endregion
        public static void MAssemblyGroupCommonConstructorForGHHSAndGHBSPart2(
            IGAssemblyGroupBasicConstructorResult mCreateAssemblyGroupResult)
        {
            #region Add a StateMachine for the service
            #region Declare and populate the initial initialDiGraphList, which handles basic states for a GHS
            List <string> initialDiGraphList = new List <string>()
            {
                @"WaitingForInitialization ->ServiceFaulted [label = ""AnyException""]",
                @"WaitingForInitialization ->ShutdownStarted [label = ""StopAsyncActivated""]",
                @"ServiceFaulted ->ShutdownStarted [label = ""CancellationTokenActivated""]",
                @"ServiceFaulted ->ShutdownStarted [label = ""StopAsyncActivated""]",
                @"ShutdownStarted->ShutDownComplete [label = ""AllShutDownStepsCompleted""]",
            };
            #endregion
            MStateMachineConstructor(mCreateAssemblyGroupResult.GTitularBaseCompilationUnit, mCreateAssemblyGroupResult.GNamespaceBase, mCreateAssemblyGroupResult.GClassBase, mCreateAssemblyGroupResult.GPrimaryConstructorBase, initialDiGraphList);
            #endregion


            #region ResourceUnits
            GResourceUnit gResourceUnit;
            GResourceItem gResourceItem;
            Dictionary <IPhilote <IGResourceItem>, IGResourceItem> gResourceItems;

            GPatternReplacement gExceptionMessagesResourcePatternReplacement = new GPatternReplacement(
                gDictionary: new Dictionary <Regex, string>()
            {
                { new Regex("ExceptionMessagesResourceUnitNameReplacementPattern"), "AssemblyUnitNameReplacementPattern" }
            });
            gExceptionMessagesResourcePatternReplacement.GDictionary.AddRange(mCreateAssemblyGroupResult.GTitularAssemblyUnitPatternReplacement.GDictionary);
            gResourceItem = new GResourceItem(gName: "ExceptionMessage1", gValue: "text for exception {0}",
                                              gComment: "{0} is the exception something?");
            gResourceItems = new Dictionary <IPhilote <IGResourceItem>, IGResourceItem> {
                [gResourceItem.Philote] = gResourceItem
            };
            gResourceUnit =
                new GResourceUnit("ExceptionMessages", gRelativePath: "Resources", gResourceItems: gResourceItems,
                                  gPatternReplacement: gExceptionMessagesResourcePatternReplacement);
            mCreateAssemblyGroupResult.GTitularAssemblyUnit.GResourceUnits.Add(gResourceUnit.Philote, gResourceUnit);
            mCreateAssemblyGroupResult.GTitularAssemblyUnit.GProjectUnit.GResourceUnits.Add(gResourceUnit.Philote, gResourceUnit);
            GPatternReplacement gUIMessagesResourcePatternReplacement = new GPatternReplacement(
                gDictionary: new Dictionary <Regex, string>()
            {
                { new Regex("ExceptionMessagesResourceUnitNameReplacementPattern"), "AssemblyUnitNameReplacementPattern" }
            });
            gUIMessagesResourcePatternReplacement.GDictionary.AddRange(mCreateAssemblyGroupResult.GTitularAssemblyUnitPatternReplacement.GDictionary);
            gResourceItem = new GResourceItem(gName: "Enter Selection>", gValue: "Enter Selection>",
                                              gComment: "Enter Selection prompt for Console UI");
            gResourceItems = new Dictionary <IPhilote <IGResourceItem>, IGResourceItem> {
                [gResourceItem.Philote] = gResourceItem
            };
            gResourceUnit = new GResourceUnit("UIMessages", gRelativePath: "Resources", gResourceItems: gResourceItems,
                                              gPatternReplacement: gUIMessagesResourcePatternReplacement);
            mCreateAssemblyGroupResult.GTitularAssemblyUnit.GResourceUnits.Add(gResourceUnit.Philote, gResourceUnit);
            mCreateAssemblyGroupResult.GTitularAssemblyUnit.GProjectUnit.GResourceUnits.Add(gResourceUnit.Philote, gResourceUnit);
            #endregion

            //#region StringConstants Base CompilationUnit
            //mCreateAssemblyGroupResult.GTitularBaseCompilationUnitPatternReplacement = new GPatternReplacement(
            //  gDictionary: new Dictionary<Regex, string>() {
            //    {new Regex("CompilationUnitNameReplacementPattern"), "AssemblyUnitNameReplacementPattern"}
            //  });
            //foreach (var kvp in mCreateAssemblyGroupResult.gAssemblyUnitPatternReplacement.GDictionary) {
            //  mCreateAssemblyGroupResult.GTitularBaseCompilationUnitPatternReplacement.GDictionary.Add(kvp.Key, kvp.Value);
            //}

            #region DefaultConfiguration CompilationUnit
            #region GPatternReplacement for the DefaultConfiguration CompilationUnit
            var gTitularAssemblyUnitDefaultConfigurationPatternReplacement =
                new GPatternReplacement(gName: "gTitularAssemblyUnitDefaultConfigurationPatternReplacement");
            gTitularAssemblyUnitDefaultConfigurationPatternReplacement.GDictionary.AddRange(
                mCreateAssemblyGroupResult.GTitularAssemblyUnitPatternReplacement.GDictionary);
            #endregion
            #region Additional DefaultConfiguration items
            var gAdditionalStatements = new List <string>()
            {
                "{dummyConfigKeyRoot,dummyConfigDefaultString}"
            };
            #endregion
            var gCompilationUnit = CompilationUnitDefaultConfigurationConstructor(gNamespaceName: mCreateAssemblyGroupResult.GNamespaceDerived.GName,
                                                                                  gRelativePath: mCreateAssemblyGroupResult.SubDirectoryForGeneratedFiles, gAdditionalStatements: gAdditionalStatements,
                                                                                  gPatternReplacement: gTitularAssemblyUnitDefaultConfigurationPatternReplacement);
            mCreateAssemblyGroupResult.GTitularAssemblyUnit.GCompilationUnits.Add(gCompilationUnit.Philote, gCompilationUnit);
            #endregion
            #region Settings File(s) for Configuration
            #endregion
            #region Upate the ProjectUnit in the Titular AssemblyUnit

            #region ItemGroups for the ProjectUnit
            var gItemGroupInProjectUnitList = MGenericHostServiceCommonItemGroupInProjectUnitList();

            gItemGroupInProjectUnitList.ForEach(o =>
                                                mCreateAssemblyGroupResult.GTitularAssemblyUnit.GProjectUnit.GItemGroupInProjectUnits.Add(o.Philote, o));
            //_projectReferences.ForEach(o =>
            //  gAssemblyUnit.GProjectUnit.GItemGroupInProjectUnits.Add(o.Philote, o));
            //_packageReferences.ForEach(o =>
            //  gAssemblyUnit.GProjectUnit.GItemGroupInProjectUnits.Add(o.Philote, o));
            #endregion
            #endregion
            // GAssemblyGroup.GAssemblyUnits.Add(gAssemblyUnit.Philote, gAssemblyUnit);
            /* ************************************************************************************ */
            //#region Interfaces
            //#region Pattern Replacements for AssemblyUnit
            //gAssemblyUnitPatternReplacement = new GPatternReplacement(gDictionary: new Dictionary<Regex, string>() {
            //  {new Regex("AssemblyUnitNameReplacementPattern"), $"{GAssemblyGroupName}"}
            //});
            //foreach (var kvp in gAssemblyGroupPatternReplacement.GDictionary) {
            //  gAssemblyUnitPatternReplacement.GDictionary.Add(kvp.Key, kvp.Value);
            //}
            //#endregion
            //#region Create AssemblyUnit for Interfaces
            //gAssemblyUnitName = $"{GAssemblyGroupName}.Interfaces";
            //gAssemblyUnit = new GAssemblyUnit($"{gAssemblyUnitName}",
            //  gRelativePath: $"{gAssemblyUnitName}",
            //  gProjectUnit: new GProjectUnit($"{gAssemblyUnitName}",
            //    gPatternReplacement: gAssemblyUnitPatternReplacement), gPatternReplacement: gAssemblyUnitPatternReplacement);
            //#endregion
            //#region Pattern Replacements for CompilationUnit
            //gCompilationUnitPatternReplacement = new GPatternReplacement(gDictionary: new Dictionary<Regex, string>() {
            //  {new Regex("CompilationUnitNameReplacementPattern"), "AssemblyUnitNameReplacementPattern"}
            //});
            //foreach (var kvp in gAssemblyUnitPatternReplacement.GDictionary) {
            //  gCompilationUnitPatternReplacement.GDictionary.Add(kvp.Key, kvp.Value);
            //}
            //#endregion
            //#region Create CompilationUnit for Titular Base Interface CompilationUnit
            //var compilationUnitName = $"I{baseCompilationUnitName}";
            //gCompilationUnit = new GCompilationUnit($"{compilationUnitName}", gFileSuffix: ".cs",
            //  gRelativePath: SubDirectoryForGeneratedFiles, gPatternReplacement: gCompilationUnitPatternReplacement);
            //gAssemblyUnit.GCompilationUnits.Add(gCompilationUnit.Philote, gCompilationUnit);
            #region Usings For Titular Base Interface CompilationUnit
            var gUsingGroup = MUsingGroupForMicrosoftGenericHostInGHHSAndGHBS();
            mCreateAssemblyGroupResult.GTitularInterfaceBaseCompilationUnit.GUsingGroups.Add(gUsingGroup.Philote, gUsingGroup);
            gUsingGroup = MUsingGroupForSystemGenericHostInGHHSAndGHBS();
            mCreateAssemblyGroupResult.GTitularInterfaceBaseCompilationUnit.GUsingGroups.Add(gUsingGroup.Philote, gUsingGroup);
            #endregion
            //#region Namespace For Titular Base Interface CompilationUnit
            //gNamespace = new GNamespace($"{BaseNamespaceName}.{GAssemblyGroupName}");
            //gCompilationUnit.GNamespaces.Add(gNamespace.Philote, gNamespace);
            //#endregion
            //#region Create Interface for Titular Base Interface CompilationUnit (IHostedService)
            //var baseInterfaceName = $"I{baseCompilationUnitName}";
            //var gInterface = new GInterface(baseInterfaceName, "public");
            //gNamespace.GInterfaces.Add(gInterface.Philote, gInterface);
            //#endregion
            //#endregion
            #region Create CompilationUnit for Titular Interface CompilationUnit
            //compilationUnitName = $"I{GAssemblyGroupName}";
            //gCompilationUnit = new GCompilationUnit($"{compilationUnitName}", gFileSuffix: ".cs",
            //  gRelativePath: SubDirectoryForGeneratedFiles, gPatternReplacement: gCompilationUnitPatternReplacement);
            //gAssemblyUnit.GCompilationUnits.Add(gCompilationUnit.Philote, gCompilationUnit);
            #region Usings For Titular Interface CompilationUnit
            gUsingGroup = MUsingGroupForSystemGenericHostInGHHSAndGHBS();
            mCreateAssemblyGroupResult.GTitularInterfaceDerivedCompilationUnit.GUsingGroups.Add(gUsingGroup.Philote, gUsingGroup);
            #endregion
            //#region Namespace For Titular Interface CompilationUnit
            //gNamespace = new GNamespace($"{BaseNamespaceName}.{GAssemblyGroupName}");
            //gCompilationUnit.GNamespaces.Add(gNamespace.Philote, gNamespace);
            //#endregion
            //#region Create Interface for Titular Interface CompilationUnit (IHostedService)
            //var titularInterfaceName = $"I{GAssemblyGroupName}";
            //gInterface = new GInterface(titularInterfaceName, "public",
            //  gImplements: new List<string>() {$"{baseInterfaceName}"});
            //gNamespace.GInterfaces.Add(gInterface.Philote, gInterface);
            //#endregion
            #endregion
            #region Upate the ProjectUnit in the Interfaces AssemblyUnit
            //#region PropertyGroups for the ProjectUnit in the Interfaces AssemblyUnit
            //var gPropertyGroupInProjectUnit = PropertyGroupInProjectUnitForProjectUnitIsLibrary();
            //gAssemblyUnit.GProjectUnit.GPropertyGroupInProjectUnits[gPropertyGroupInProjectUnit.Philote] =
            //  gPropertyGroupInProjectUnit;
            //gPropertyGroupInProjectUnit = PropertyGroupInProjectUnitForPackableOnBuild();
            //gAssemblyUnit.GProjectUnit.GPropertyGroupInProjectUnits[gPropertyGroupInProjectUnit.Philote] =
            //  gPropertyGroupInProjectUnit;
            //gPropertyGroupInProjectUnit = PropertyGroupInProjectUnitForLifecycleStage();
            //gAssemblyUnit.GProjectUnit.GPropertyGroupInProjectUnits[gPropertyGroupInProjectUnit.Philote] =
            //  gPropertyGroupInProjectUnit;
            //gPropertyGroupInProjectUnit = PropertyGroupInProjectUnitForBuildConfigurations();
            //gAssemblyUnit.GProjectUnit.GPropertyGroupInProjectUnits[gPropertyGroupInProjectUnit.Philote] =
            //  gPropertyGroupInProjectUnit;
            //gPropertyGroupInProjectUnit = PropertyGroupInProjectUnitForVersion();
            //gAssemblyUnit.GProjectUnit.GPropertyGroupInProjectUnits[gPropertyGroupInProjectUnit.Philote] =
            //  gPropertyGroupInProjectUnit;
            //#endregion
            #region ItemGroups for the ProjectUnit in the Interfaces AssemblyUnit
            new List <IGItemGroupInProjectUnit>()
            {
                NetCoreGenericHostReferencesItemGroupInProjectUnit(),
            }.ForEach(o => mCreateAssemblyGroupResult.gTitularInterfaceAssemblyUnit.GProjectUnit.GItemGroupInProjectUnits.Add(o.Philote, o));
            #endregion
            #endregion
            //GAssemblyGroup.GAssemblyUnits.Add(gAssemblyUnit.Philote, gAssemblyUnit);
            //#endregion
            //return GAssemblyGroup;
        }