internal static IMiCakeModuleCollection CombineNormalAndFeatureModules( IMiCakeModuleCollection normalModules, IMiCakeModuleCollection featureModules) { IMiCakeModuleCollection miCakeModules = new MiCakeModuleCollection(); var assignFeatureModules = AssignFeatureModules(featureModules); Queue <IMiCakeModuleCollection> moduleQueue = new Queue <IMiCakeModuleCollection>(); moduleQueue.Enqueue(assignFeatureModules.before); moduleQueue.Enqueue(normalModules); moduleQueue.Enqueue(assignFeatureModules.after); var count = moduleQueue.Count; for (int i = 0; i < count; i++) { var modules = moduleQueue.Dequeue(); foreach (var module in modules) { miCakeModules.AddIfNotContains(module); } } return(miCakeModules); }
public static IMiCakeModuleCollection ToMiCakeModuleCollection(this IEnumerable <MiCakeModuleDescriptor> source) { MiCakeModuleCollection miCakeModules = new MiCakeModuleCollection(); foreach (var item in source) { miCakeModules.Add(item); } return(miCakeModules); }
private static (IMiCakeModuleCollection before, IMiCakeModuleCollection after) AssignFeatureModules(IMiCakeModuleCollection featureModules) { var beforeFeatureModules = new MiCakeModuleCollection(); var afterFeatureModules = new MiCakeModuleCollection(); foreach (var featureModule in featureModules) { bool depencyIsAfter = featureModule.RelyOnModules.Any(module => ((IFeatureModule)module.Instance).Order == FeatureModuleLoadOrder.AfterCommonModule); var currentOrder = ((IFeatureModule)featureModule.Instance).Order; if (!depencyIsAfter && currentOrder == FeatureModuleLoadOrder.BeforeCommonModule) { beforeFeatureModules.Add(featureModule); } else { afterFeatureModules.Add(featureModule); } } return(beforeFeatureModules, afterFeatureModules); }