From 0fa198ed8c6c6fc81e649466879752a99fe37d08 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Tue, 14 Nov 2017 23:24:05 -0800 Subject: Cache loaded extensions --- src/WixToolset.Core/ExtensionManager.cs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/WixToolset.Core/ExtensionManager.cs b/src/WixToolset.Core/ExtensionManager.cs index 993c21cb..6a9d3b5a 100644 --- a/src/WixToolset.Core/ExtensionManager.cs +++ b/src/WixToolset.Core/ExtensionManager.cs @@ -14,6 +14,7 @@ namespace WixToolset.Core internal class ExtensionManager : IExtensionManager { private List extensionFactories = new List(); + private Dictionary> loadedExtensionsByType = new Dictionary>(); public void Add(Assembly extensionAssembly) { @@ -56,17 +57,22 @@ namespace WixToolset.Core public IEnumerable Create() where T : class { - var extensions = new List(); - - foreach (var factory in this.extensionFactories) + if (!this.loadedExtensionsByType.TryGetValue(typeof(T), out var extensions)) { - if (factory.TryCreateExtension(typeof(T), out var obj) && obj is T extension) + extensions = new List(); + + foreach (var factory in this.extensionFactories) { - extensions.Add(extension); + if (factory.TryCreateExtension(typeof(T), out var obj) && obj is T extension) + { + extensions.Add(extension); + } } + + this.loadedExtensionsByType.Add(typeof(T), extensions); } - return extensions; + return extensions.Cast().ToList(); } private static Assembly ExtensionLoadFrom(string assemblyName) -- cgit v1.2.3-55-g6feb