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();
 }
Example #13
0
        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--;
                }
            }
        }