diff --git a/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpListExtensions.cs b/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpListExtensions.cs
index a123236a4e..ec7a640a39 100644
--- a/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpListExtensions.cs
+++ b/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpListExtensions.cs
@@ -180,7 +180,10 @@ namespace System.Collections.Generic
/// The type of the members of values.
/// A list of objects to sort
/// Function to resolve the dependencies
- ///
+ ///
+ /// Returns a new list ordered by dependencies.
+ /// If A depends on B, then B will come before than A in the resulting list.
+ ///
public static List SortByDependencies(this IEnumerable source, Func> getDependencies)
{
/* See: http://www.codeproject.com/Articles/869059/Topological-sorting-in-Csharp
diff --git a/framework/test/Volo.Abp.Core.Tests/System/Collections/Generic/AbpListExtensions_Tests.cs b/framework/test/Volo.Abp.Core.Tests/System/Collections/Generic/AbpListExtensions_Tests.cs
index 93e2ef5824..9c8926f38a 100644
--- a/framework/test/Volo.Abp.Core.Tests/System/Collections/Generic/AbpListExtensions_Tests.cs
+++ b/framework/test/Volo.Abp.Core.Tests/System/Collections/Generic/AbpListExtensions_Tests.cs
@@ -1,5 +1,6 @@
using System.Linq;
using Shouldly;
+using Volo.Abp;
using Xunit;
namespace System.Collections.Generic
@@ -171,5 +172,36 @@ namespace System.Collections.Generic
list[1].ShouldBe(42);
list[2].ShouldBe(3);
}
+
+ [Fact]
+ public void SortByDependencies()
+ {
+ var dependencies = new Dictionary
+ {
+ {'A', new[] {'B', 'G'}},
+ {'B', new[] {'C', 'E'}},
+ {'C', new[] {'D'}},
+ {'D', new char[0]},
+ {'E', new[] {'C', 'F'}},
+ {'F', new[] {'C'}},
+ {'G', new[] {'F'}}
+ };
+
+ for (int i = 0; i < 3; i++)
+ {
+ var list = RandomHelper
+ .GenerateRandomizedList(new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G'});
+
+ list = list.SortByDependencies(c => dependencies[c]);
+
+ foreach (var dependency in dependencies)
+ {
+ foreach (var dependedValue in dependency.Value)
+ {
+ list.IndexOf(dependency.Key).ShouldBeGreaterThan(list.IndexOf(dependedValue));
+ }
+ }
+ }
+ }
}
-}
+}
\ No newline at end of file