From f195604266cb2b675d31c21df343e1f2ac8bdb0c Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Wed, 24 Oct 2018 21:04:19 -0700 Subject: Support passing IServiceProvider to IExtensionFactory's --- .../ExtensibilityServices/ExtensionManager.cs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/WixToolset.Core') diff --git a/src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs b/src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs index 5714701a..2ecf85ae 100644 --- a/src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs +++ b/src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs @@ -16,14 +16,32 @@ namespace WixToolset.Core.ExtensibilityServices private List extensionFactories = new List(); private Dictionary> loadedExtensionsByType = new Dictionary>(); + public ExtensionManager(IServiceProvider serviceProvider) + { + this.ServiceProvider = serviceProvider; + } + + private IServiceProvider ServiceProvider { get; } + public void Add(Assembly extensionAssembly) { var types = extensionAssembly.GetTypes().Where(t => !t.IsAbstract && !t.IsInterface && typeof(IExtensionFactory).IsAssignableFrom(t)); - var factories = types.Select(t => (IExtensionFactory)Activator.CreateInstance(t)).ToList(); + var factories = types.Select(this.CreateExtensionFactory).ToList(); this.extensionFactories.AddRange(factories); } + private IExtensionFactory CreateExtensionFactory(Type type) + { + var constructor = type.GetConstructor(new[] { typeof(IServiceProvider) }); + if (constructor != null) + { + return (IExtensionFactory)constructor.Invoke(new[] { this.ServiceProvider }); + } + + return (IExtensionFactory)Activator.CreateInstance(type); + } + public void Load(string extensionPath) { Assembly assembly; -- cgit v1.2.3-55-g6feb