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 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();
 }
        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--;
        }
 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();
 }