private RunList<StepDescriptor> BuildRunlist(CodeModelBuilder modelBuilder, string[] finalResources) { var mutators = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(x => x.GetTypes()) .Where(x => typeof(IMutator).IsAssignableFrom(x) && x.IsClass && !x.IsAbstract) .Select(x => new MutatorStepDescriptor(modelBuilder, x)); var finalResourcesStep = new RequiredResources(finalResources); var dependencyNetwork = new DependencyManager<StepDescriptor>(x => x.Provides, x => x.Needs, x => x.OptionalNeeds); dependencyNetwork.AddRange(mutators); dependencyNetwork.Add(finalResourcesStep); dependencyNetwork.RequireElements(finalResourcesStep); return dependencyNetwork.CalculateRunList(); }
private RunList<StepDescriptor> DetermineRunList(IEnumerable<StepDescriptor> descriptors, IList<StepDescriptor> rules) { var manager = new DependencyManager<StepDescriptor>(x => x.Provides, x => x.Needs, x => x.OptionalNeeds); manager.AddRange(descriptors); manager.AddRange(rules); manager.RequireElements(rules); return manager.CalculateRunList(); }