Cache loaded extensions
Rob Mensching committed
Nov 14, 2017 at 23:24 UTC
0fa198ed8c6c6fc81e649466879752a99fe37d08
1 file changed
+12
-6
src/WixToolset.Core/ExtensionManager.cs
+12
-6
@@ -14,6 +14,7 @@ namespace WixToolset.Core
14
internal class ExtensionManager : IExtensionManager
15
{
16
private List<IExtensionFactory> extensionFactories = new List<IExtensionFactory>();
17
+ private Dictionary<Type, List<object>> loadedExtensionsByType = new Dictionary<Type, List<object>>();
18
19
public void Add(Assembly extensionAssembly)
20
{
@@ -56,17 +57,22 @@ namespace WixToolset.Core
57
58
public IEnumerable<T> Create<T>() where T : class
59
{
59
- var extensions = new List<T>();
60
-
61
- foreach (var factory in this.extensionFactories)
60
+ if (!this.loadedExtensionsByType.TryGetValue(typeof(T), out var extensions))
61
{
63
- if (factory.TryCreateExtension(typeof(T), out var obj) && obj is T extension)
62
+ extensions = new List<object>();
63
+
64
+ foreach (var factory in this.extensionFactories)
65
{
65
- extensions.Add(extension);
66
+ if (factory.TryCreateExtension(typeof(T), out var obj) && obj is T extension)
67
+ {
68
+ extensions.Add(extension);
69
+ }
70
}
71
+
72
+ this.loadedExtensionsByType.Add(typeof(T), extensions);
73
}
74
69
- return extensions;
75
+ return extensions.Cast<T>().ToList();
76
}
77
78
private static Assembly ExtensionLoadFrom(string assemblyName)