public void WriteConstructionLog(ConstructionLogContext context) { context.WriteIndent(); if (ContainerService != null) { context.UsedFromDependency = this; ContainerService.WriteConstructionLog(context); return; } if (Status != ServiceStatus.Ok) context.Writer.WriteMeta("!"); context.Writer.WriteName(Name); if (Comment != null && Status != ServiceStatus.Error) { context.Writer.WriteMeta(" - "); context.Writer.WriteMeta(Comment); } if (Status == ServiceStatus.Ok && constantKind.HasValue) { if (constantKind == ConstantKind.Value) ValueFormatter.WriteValue(context, Value, true); if (constantKind == ConstantKind.Resource) context.Writer.WriteMeta(string.Format(" resource [{0}]", resourceName)); } if (Status == ServiceStatus.Error) context.Writer.WriteMeta(" <---------------"); context.Writer.WriteNewLine(); }
private static string FormatAsSimpleType(object value, ConstructionLogContext context) { Func<object, string> formatter; return value == null || value.GetType().IsSimpleType() ? InternalHelpers.DumpValue(value) : context.ValueFormatters.TryGetValue(value.GetType(), out formatter) ? formatter(value) : null; }
private static string FormatAsSimpleType(object value, ConstructionLogContext context) { Func <object, string> formatter; return(value == null || value.GetType().IsSimpleType() ? InternalHelpers.DumpValue(value) : context.ValueFormatters.TryGetValue(value.GetType(), out formatter) ? formatter(value) : null); }
public static void WriteValue(ConstructionLogContext context, object value, bool isTop) { var formattedValue = FormatAsSimpleType(value, context); if (formattedValue != null) { if (isTop && value != null && context.ValueFormatters.ContainsKey(value.GetType())) { context.Writer.WriteMeta(" const"); } context.Writer.WriteMeta(" -> " + formattedValue); return; } if (isTop) { context.Writer.WriteMeta(" const"); } context.Indent++; var enumerable = value as IEnumerable; if (enumerable == null) { var properties = value.GetType() .GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(x => x.CanRead && (x.CanWrite || IsAutoProperty(x))) .ToArray(); if (properties.Length > 0) { WriteMembers(context, properties, value); } else { WriteMembers(context, value.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance), value); } } else { foreach (var item in enumerable) { context.Writer.WriteNewLine(); context.WriteIndent(); formattedValue = FormatAsSimpleType(item, context); if (formattedValue == null) { context.Writer.WriteName("item"); WriteValue(context, item, false); } else { context.Writer.WriteMeta(formattedValue); } } } context.Indent--; }
private static void WriteMembers(ConstructionLogContext context, IEnumerable <MemberInfo> members, object value) { foreach (var m in members) { var propVal = m is FieldInfo ? ((FieldInfo)m).GetValue(value) : ((PropertyInfo)m).GetValue(value); context.Writer.WriteNewLine(); context.WriteIndent(); context.Writer.WriteName(m.Name); WriteValue(context, propVal, false); } }
private static void WriteMembers(ConstructionLogContext context, IEnumerable<MemberInfo> members, object value) { foreach (var m in members) { var propVal = m is FieldInfo ? ((FieldInfo) m).GetValue(value) : ((PropertyInfo) m).GetValue(value); context.Writer.WriteNewLine(); context.WriteIndent(); context.Writer.WriteName(m.Name); WriteValue(context, propVal, false); } }
public static void WriteValue(ConstructionLogContext context, object value, bool isTop) { var formattedValue = FormatAsSimpleType(value, context); if (formattedValue != null) { if (isTop && value != null && context.ValueFormatters.ContainsKey(value.GetType())) context.Writer.WriteMeta(" const"); context.Writer.WriteMeta(" -> " + formattedValue); return; } if (isTop) context.Writer.WriteMeta(" const"); context.Indent++; var enumerable = value as IEnumerable; if (enumerable == null) { var properties = value.GetType() .GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(x => x.CanRead && (x.CanWrite || IsAutoProperty(x))) .ToArray(); if (properties.Length > 0) WriteMembers(context, properties, value); else WriteMembers(context, value.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance), value); } else foreach (var item in enumerable) { context.Writer.WriteNewLine(); context.WriteIndent(); formattedValue = FormatAsSimpleType(item, context); if (formattedValue == null) { context.Writer.WriteName("item"); WriteValue(context, item, false); } else context.Writer.WriteMeta(formattedValue); } context.Indent--; }
public void WriteConstructionLog(ConstructionLogContext context) { context.WriteIndent(); if (ContainerService != null) { context.UsedFromDependency = this; ContainerService.WriteConstructionLog(context); return; } if (Status != ServiceStatus.Ok) { context.Writer.WriteMeta("!"); } context.Writer.WriteName(Name); if (Comment != null && Status != ServiceStatus.Error) { context.Writer.WriteMeta(" - "); context.Writer.WriteMeta(Comment); } if (Status == ServiceStatus.Ok && constantKind.HasValue) { if (constantKind == ConstantKind.Value) { ValueFormatter.WriteValue(context, Value, true); } if (constantKind == ConstantKind.Resource) { context.Writer.WriteMeta(string.Format(" resource [{0}]", resourceName)); } } if (Status == ServiceStatus.Error) { context.Writer.WriteMeta(" <---------------"); } context.Writer.WriteNewLine(); }
public void WriteConstructionLog(ConstructionLogContext context) { var usedContracts = UsedContracts; var attentionRequired = Status.IsBad() || Status == ServiceStatus.NotResolved && (context.UsedFromDependency == null || context.UsedFromDependency.Status == ServiceStatus.NotResolved); if (attentionRequired) context.Writer.WriteMeta("!"); var formattedName = context.UsedFromDependency == null ? Type.FormatName() : context.UsedFromDependency.Name; context.Writer.WriteName(formattedName); if (usedContracts != null && usedContracts.Length > 0) context.Writer.WriteUsedContract(InternalHelpers.FormatContractsKey(usedContracts)); if (!context.Seen.Add(new ServiceName(Type, usedContracts))) { //todo refactor this shit if (Status == ServiceStatus.Error && comment.Contains("cyclic dependency")) context.Writer.WriteMeta(" <---------------"); context.Writer.WriteNewLine(); return; } if (instances.Length > 1) context.Writer.WriteMeta("++"); if (Status == ServiceStatus.Error) context.Writer.WriteMeta(" <---------------"); else { var logComment = comment; if (logComment == null && context.UsedFromDependency != null && context.UsedFromDependency.Status != ServiceStatus.Error) logComment = context.UsedFromDependency.Comment; if (logComment != null) { context.Writer.WriteMeta(" - "); context.Writer.WriteMeta(logComment); } } if (context.UsedFromDependency != null && context.UsedFromDependency.Status == ServiceStatus.Ok && (context.UsedFromDependency.Value == null || context.UsedFromDependency.Value.GetType().IsSimpleType())) context.Writer.WriteMeta(" -> " + InternalHelpers.DumpValue(context.UsedFromDependency.Value)); if (initializing) context.Writer.WriteMeta(", initializing ..."); else if (disposing) context.Writer.WriteMeta(", disposing ..."); context.Writer.WriteNewLine(); if (dependencies != null) foreach (var d in dependencies) { context.Indent++; d.WriteConstructionLog(context); context.Indent--; } }
private void WriteValue(ConstructionLogContext context) { string formattedValue; if (TryFormat(Value, context, out formattedValue)) { context.Writer.WriteMeta(" -> " + formattedValue); return; } var enumerable = Value as IEnumerable; if (enumerable != null) { context.Indent++; foreach (var item in enumerable) { if (!TryFormat(item, context, out formattedValue)) formattedValue = "?"; context.Writer.WriteNewLine(); context.WriteIndent(); context.Writer.WriteMeta(formattedValue); } context.Indent--; return; } context.Indent++; foreach (var prop in Value.GetType().GetProperties()) { if (!prop.CanRead) continue; var propVal = prop.GetValue(Value, null); if (!TryFormat(propVal, context, out formattedValue)) continue; context.Writer.WriteNewLine(); context.WriteIndent(); context.Writer.WriteName(prop.Name); context.Writer.WriteMeta(" -> " + formattedValue); } context.Indent--; }
private static bool TryFormat(object value, ConstructionLogContext context, out string formattedValue) { Func<object, string> formatter; if (value != null && context.ValueFormatters.TryGetValue(value.GetType(), out formatter)) { formattedValue = formatter(value); return true; } if (value == null || value.GetType().IsSimpleType()) { formattedValue = InternalHelpers.DumpValue(value); return true; } formattedValue = null; return false; }
public void WriteConstructionLog(ConstructionLogContext context) { context.WriteIndent(); if (ContainerService != null) { context.UsedFromDependency = this; ContainerService.WriteConstructionLog(context); return; } if (Status != ServiceStatus.Ok) context.Writer.WriteMeta("!"); context.Writer.WriteName(Name); if (Comment != null && Status != ServiceStatus.Error) { context.Writer.WriteMeta(" - "); context.Writer.WriteMeta(Comment); } if (Status == ServiceStatus.Ok && constantKind.HasValue) { if (constantKind == ConstantKind.Value) { if (Value == null || Value.GetType().IsSimpleType()) context.Writer.WriteMeta(" -> " + InternalHelpers.DumpValue(Value)); else { context.Writer.WriteMeta(" const"); WriteValue(context); } } if (constantKind == ConstantKind.Resource) context.Writer.WriteMeta(string.Format(" resource [{0}]", resourceName)); } if (Status == ServiceStatus.Error) context.Writer.WriteMeta(" <---------------"); context.Writer.WriteNewLine(); }
public void WriteConstructionLog(ConstructionLogContext context) { var usedContracts = UsedContracts; var attentionRequired = Status.IsBad() || Status == ServiceStatus.NotResolved && (context.UsedFromDependency == null || context.UsedFromDependency.Status == ServiceStatus.NotResolved); if (attentionRequired) { context.Writer.WriteMeta("!"); } var formattedName = context.UsedFromDependency == null?Type.FormatName() : context.UsedFromDependency.Name; context.Writer.WriteName(formattedName); if (usedContracts != null && usedContracts.Length > 0) { context.Writer.WriteUsedContract(InternalHelpers.FormatContractsKey(usedContracts)); } var name = new ServiceName(Type, usedContracts); if (!context.Seen.Add(name)) { if (context.UsedFromService != null && context.UsedFromService.Name.Equals(name) && context.UsedFromDependency != null && context.UsedFromDependency.Comment != null) { context.Writer.WriteMeta(" - "); context.Writer.WriteMeta(context.UsedFromDependency.Comment); } context.Writer.WriteNewLine(); return; } if (Instances.Length > 1) { context.Writer.WriteMeta("++"); } if (Status == ServiceStatus.Error) { context.Writer.WriteMeta(" <---------------"); } else { var logComment = comment; if (logComment == null && context.UsedFromDependency != null && context.UsedFromDependency.Status != ServiceStatus.Error) { logComment = context.UsedFromDependency.Comment; } if (logComment != null) { context.Writer.WriteMeta(" - "); context.Writer.WriteMeta(logComment); } } if (context.UsedFromDependency != null && context.UsedFromDependency.Status == ServiceStatus.Ok && (context.UsedFromDependency.Value == null || context.UsedFromDependency.Value.GetType().IsSimpleType())) { context.Writer.WriteMeta(" -> " + InternalHelpers.DumpValue(context.UsedFromDependency.Value)); } else if (Instances.Length == 1 && Instances[0].IsConstant) { ValueFormatter.WriteValue(context, Instances[0].Instance, true); } if (initializing) { context.Writer.WriteMeta(", initializing ..."); } else if (disposing) { context.Writer.WriteMeta(", disposing ..."); } context.Writer.WriteNewLine(); if (dependencies != null) { foreach (var d in dependencies) { context.Indent++; context.UsedFromService = this; d.WriteConstructionLog(context); context.Indent--; } } }