internal static void WriteEnumerableInstance(this TreeNode parent, LamarServicesInput input, IEnumerableInstance instance, bool isDefault, string prefix) { var description = instance.ServiceType.CleanFullName(); if (prefix.IsNotEmpty()) { description = prefix + description; } var top = parent.AddNode(description); var number = 0; foreach (var child in instance.Elements) { var elementPrefix = ((++number).ToString()).PadLeft(3) + ". "; switch (child.Lifetime) { case ServiceLifetime.Transient: top.WriteBuildPlanNode(input, child, false, elementPrefix); break; case ServiceLifetime.Scoped: top.AddNode($"{elementPrefix}Resolved from Scope -> {child.ToDescription()}"); break; case ServiceLifetime.Singleton: top.AddNode($"{elementPrefix}Singleton Resolved from Root -> {child.ToDescription()}"); break; } } }
public static void WriteBuildPlanNode(this TreeNode parent, LamarServicesInput input, Instance instance, bool isDefault, string prefix = null) { if (instance is ConstructorInstance c) { parent.WriteConstructorBuildPlan(input, c, isDefault, prefix); } else if (instance is IEnumerableInstance e) { parent.WriteEnumerableInstance(input, e, isDefault, prefix); } else { parent.WriteSingleInstanceNode(input, instance, isDefault, prefix); } }
public static TreeNode WriteSingleInstanceNode(this TreeNode parent, LamarServicesInput input, Instance instance, bool isDefault, string prefix = null) { prefix ??= $"[blue]{instance.Lifetime}:[/] "; var description = $"{prefix}{instance.ToDescription().Replace("[", "[[").Replace("]", "]]")}"; if (input.VerboseFlag && !instance.IsInlineDependency()) { description += $" named '{instance.Name}'"; } if (isDefault) { description = description.BoldText(); } return(parent.AddNode(description)); }
public static void WriteConstructorBuildPlan(this TreeNode parent, LamarServicesInput input, ConstructorInstance instance, bool isDefault, string prefix = null) { var top = parent.WriteSingleInstanceNode(input, instance, isDefault, prefix); foreach (var argument in instance.Arguments) { string argumentPrefix = $"[blue]{argument.Parameter.Name}[/]: "; if (argument.Instance.IsInlineDependency()) { top.WriteBuildPlanNode(input, argument.Instance, false, argumentPrefix); } switch (argument.Instance.Lifetime) { case ServiceLifetime.Transient: top.WriteBuildPlanNode(input, argument.Instance, false, argumentPrefix); break; case ServiceLifetime.Scoped: top.AddNode($"{argumentPrefix} = Resolved from Scope -> {argument.Instance.ToDescription()}"); break; case ServiceLifetime.Singleton: top.AddNode($"{argumentPrefix} = Singleton Resolved from Root -> {argument.Instance.ToDescription()}"); break; } } foreach (var setter in instance.Setters) { var setterPrefix = $"[blue]Set {setter.Property.Name} = [/]"; top.WriteBuildPlanNode(input, setter.Instance, false, setterPrefix); } // setters }