protected override void OnGatherDependencies(DependencyListConfig config)
        {
            config.MergeComponents(_systems.Select(it => it.Dependencies));

            for (var i = 0; i < _systems.Count; i++)
            {
                var a = _systems[i].Dependencies;
                for (var j = 0; j < _systems.Count; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }
                    var b = _systems[j].Dependencies;
                    if (a.IsDependentOn(b))
                    {
                        _depGraph.AddEdge(_systems[i], _systems[j]);
                    }
                }
            }

            if (!_depGraph.Validate())
            {
                var sb = new StringBuilder();
                sb.AppendLine("Cyclic nodes detected");

                sb.AppendLine();
                //try
                //{
                var depMatirx = new ComponentMatrix(_depGraph.PostOrder(_depGraph.CyclicNode));
                sb.AppendLine(depMatirx.ToString());
                sb.AppendLine();
                //}
                //catch (Exception ex) { }

                sb.AppendLine(_depGraph.ToString());

                throw new Exception(sb.ToString());
            }
        }
 protected abstract void OnGatherDependencies(DependencyListConfig config);
 private void GatherDependencies(DependencyListConfig config)
 {
     config.Type(_type);
     OnGatherDependencies(config);
 }