@joebigelow / wix / commits / 0fa198ed

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)