From c08fd0aefeea1628fe93c818ca4dde63fd6ac2e1 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Tue, 17 Oct 2017 02:47:44 -0700 Subject: Introduce WixToolsetServiceProvider Using a service provider allows all of WixToolset.Core's internal functionality to be abstracted behind interfaces in WixToolset.Extensibility. The service provide can also control what interfaces are singletons. --- src/WixToolset.BuildTasks/DoIt.cs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/WixToolset.BuildTasks') diff --git a/src/WixToolset.BuildTasks/DoIt.cs b/src/WixToolset.BuildTasks/DoIt.cs index d3bd7a80..924bf92f 100644 --- a/src/WixToolset.BuildTasks/DoIt.cs +++ b/src/WixToolset.BuildTasks/DoIt.cs @@ -9,6 +9,7 @@ namespace WixToolset.BuildTasks using Microsoft.Build.Utilities; using WixToolset.Core; using WixToolset.Data; + using WixToolset.Extensibility.Services; /// /// An MSBuild task to run the WiX compiler. @@ -164,10 +165,30 @@ namespace WixToolset.BuildTasks this.Log.LogMessage(MessageImportance.Normal, "wix.exe " + commandLineString); - var command = CommandLine.ParseStandardCommandLine(commandLineString); + var serviceProvider = new WixToolsetServiceProvider(); + + var context = serviceProvider.GetService(); + context.Messaging = Messaging.Instance; + context.ExtensionManager = this.CreateExtensionManagerWithStandardBackends(serviceProvider); + context.Arguments = commandLineString; + + var commandLine = serviceProvider.GetService(); + var command = commandLine.ParseStandardCommandLine(context); command?.Execute(); } + private IExtensionManager CreateExtensionManagerWithStandardBackends(IServiceProvider serviceProvider) + { + var extensionManager = serviceProvider.GetService(); + + foreach (var type in new[] { typeof(WixToolset.Core.Burn.StandardBackend), typeof(WixToolset.Core.WindowsInstaller.StandardBackend) }) + { + extensionManager.Add(type.Assembly); + } + + return extensionManager; + } + private void DisplayMessage(object sender, DisplayEventArgs e) { this.Log.LogMessageFromText(e.Message, MessageImportance.Normal); -- cgit v1.2.3-55-g6feb