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.Core/WixToolsetServiceProvider.cs | 47 ++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/WixToolset.Core/WixToolsetServiceProvider.cs (limited to 'src/WixToolset.Core/WixToolsetServiceProvider.cs') diff --git a/src/WixToolset.Core/WixToolsetServiceProvider.cs b/src/WixToolset.Core/WixToolsetServiceProvider.cs new file mode 100644 index 00000000..c073c32b --- /dev/null +++ b/src/WixToolset.Core/WixToolsetServiceProvider.cs @@ -0,0 +1,47 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolset.Core +{ + using System; + using WixToolset.Extensibility; + using WixToolset.Extensibility.Services; + + public class WixToolsetServiceProvider : IServiceProvider + { + private ExtensionManager extensionManager; + + public object GetService(Type serviceType) + { + if (serviceType == null) throw new ArgumentNullException(nameof(serviceType)); + + // Transients. + if (serviceType == typeof(IBindContext)) + { + return new BindContext(this); + } + + if (serviceType == typeof(IInscribeContext)) + { + return new InscribeContext(this); + } + + if (serviceType == typeof(ICommandLineContext)) + { + return new CommandLineContext(this); + } + + if (serviceType == typeof(ICommandLine)) + { + return new CommandLine(); + } + + // Singletons. + if (serviceType == typeof(IExtensionManager)) + { + return extensionManager = extensionManager ?? new ExtensionManager(); + } + + throw new ArgumentException($"Unknown service type: {serviceType.Name}", nameof(serviceType)); + } + } +} -- cgit v1.2.3-55-g6feb