public void ReadConfig()
        {
            foreach (var xNode in Config.Nodes().OfType <XElement>())
            {
                ClassNames.Add(xNode.Name?.LocalName);
            }

            if (!ClassNames.Any())
            {
                var messageBuilder = new StringBuilder();
                messageBuilder.AppendLine("You must to specify at least one inner class name node to use injection!");
                messageBuilder.AppendLine("Example:");
                messageBuilder.AppendLine("<ConstructorIndex ...>");
                messageBuilder.AppendLine("\t<ClassFullNameA/>");
                messageBuilder.AppendLine("\t<ClassFullNameB/>");
                messageBuilder.AppendLine("\t...");
                messageBuilder.AppendLine("</ConstructorIndex>");
                throw new WeavingException(messageBuilder.ToString());
            }

            // process non public constructors parameter
            var processNonPublicAttribute = Config.Attribute(nameof(AllowNonPublic));

            if (processNonPublicAttribute != null)
            {
                if (!bool.TryParse(processNonPublicAttribute.Value, out var processNonPublic))
                {
                    var message = $"Bad attribute {nameof(AllowNonPublic)} BOOL value: {processNonPublicAttribute.Value}";
                    throw new WeavingException(message);
                }

                AllowNonPublic = processNonPublic;
            }
        }