From 7027e259b8987e425362ee8248e5d0efe8003d51 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Thu, 2 Apr 2020 21:00:43 +1000 Subject: Hide the concrete implementation of the service provider interfaces by adding WixToolsetServiceProviderFactory. This forces consumers to code to the interfaces. --- src/WixToolset.Core.TestPackage/WixRunner.cs | 4 ++-- .../ExtensibilityServices/ExtensionManager.cs | 6 +++--- src/WixToolset.Core/WixToolsetServiceProvider.cs | 2 +- src/WixToolset.Core/WixToolsetServiceProviderFactory.cs | 14 ++++++++++++++ src/test/Example.Extension/ExampleExtensionFactory.cs | 5 +++-- src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs | 2 +- src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs | 2 +- .../WixToolsetTest.CoreIntegration/PreprocessorFixture.cs | 2 +- .../VariableResolverFixture.cs | 2 +- 9 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 src/WixToolset.Core/WixToolsetServiceProviderFactory.cs (limited to 'src') diff --git a/src/WixToolset.Core.TestPackage/WixRunner.cs b/src/WixToolset.Core.TestPackage/WixRunner.cs index 39c4d2f7..082e9e10 100644 --- a/src/WixToolset.Core.TestPackage/WixRunner.cs +++ b/src/WixToolset.Core.TestPackage/WixRunner.cs @@ -12,13 +12,13 @@ namespace WixToolset.Core.TestPackage { public static int Execute(string[] args, out List messages) { - var serviceProvider = new WixToolsetServiceProvider(); + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); return Execute(args, serviceProvider, out messages); } public static WixRunnerResult Execute(params string[] args) { - var serviceProvider = new WixToolsetServiceProvider(); + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); var exitCode = Execute(args, serviceProvider, out var messages); return new WixRunnerResult { ExitCode = exitCode, Messages = messages.ToArray() }; } diff --git a/src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs b/src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs index d80f25a2..97216479 100644 --- a/src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs +++ b/src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs @@ -16,12 +16,12 @@ namespace WixToolset.Core.ExtensibilityServices private List extensionFactories = new List(); private Dictionary> loadedExtensionsByType = new Dictionary>(); - public ExtensionManager(IServiceProvider serviceProvider) + public ExtensionManager(IWixToolsetCoreServiceProvider serviceProvider) { this.ServiceProvider = serviceProvider; } - private IServiceProvider ServiceProvider { get; } + private IWixToolsetCoreServiceProvider ServiceProvider { get; } public void Add(Assembly extensionAssembly) { @@ -33,7 +33,7 @@ namespace WixToolset.Core.ExtensibilityServices private IExtensionFactory CreateExtensionFactory(Type type) { - var constructor = type.GetConstructor(new[] { typeof(IServiceProvider) }); + var constructor = type.GetConstructor(new[] { typeof(IWixToolsetCoreServiceProvider) }); if (constructor != null) { return (IExtensionFactory)constructor.Invoke(new[] { this.ServiceProvider }); diff --git a/src/WixToolset.Core/WixToolsetServiceProvider.cs b/src/WixToolset.Core/WixToolsetServiceProvider.cs index 68def7a8..2cd097a4 100644 --- a/src/WixToolset.Core/WixToolsetServiceProvider.cs +++ b/src/WixToolset.Core/WixToolsetServiceProvider.cs @@ -10,7 +10,7 @@ namespace WixToolset.Core using WixToolset.Extensibility.Data; using WixToolset.Extensibility.Services; - public sealed class WixToolsetServiceProvider : IWixToolsetCoreServiceProvider + internal class WixToolsetServiceProvider : IWixToolsetCoreServiceProvider { public WixToolsetServiceProvider() { diff --git a/src/WixToolset.Core/WixToolsetServiceProviderFactory.cs b/src/WixToolset.Core/WixToolsetServiceProviderFactory.cs new file mode 100644 index 00000000..51e7a447 --- /dev/null +++ b/src/WixToolset.Core/WixToolsetServiceProviderFactory.cs @@ -0,0 +1,14 @@ +// 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 WixToolset.Extensibility.Services; + + public static class WixToolsetServiceProviderFactory + { + public static IWixToolsetCoreServiceProvider CreateServiceProvider() + { + return new WixToolsetServiceProvider(); + } + } +} diff --git a/src/test/Example.Extension/ExampleExtensionFactory.cs b/src/test/Example.Extension/ExampleExtensionFactory.cs index ee9641a2..e54561ee 100644 --- a/src/test/Example.Extension/ExampleExtensionFactory.cs +++ b/src/test/Example.Extension/ExampleExtensionFactory.cs @@ -4,12 +4,13 @@ namespace Example.Extension { using System; using WixToolset.Extensibility; + using WixToolset.Extensibility.Services; public class ExampleExtensionFactory : IExtensionFactory { private ExamplePreprocessorExtensionAndCommandLine preprocessorExtension; - public ExampleExtensionFactory(IServiceProvider serviceProvider) + public ExampleExtensionFactory(IWixToolsetCoreServiceProvider serviceProvider) { this.ServiceProvider = serviceProvider; } @@ -17,7 +18,7 @@ namespace Example.Extension /// /// This exists just to show it is possible to get a service provider to the extension factory. /// - private IServiceProvider ServiceProvider { get; } + private IWixToolsetCoreServiceProvider ServiceProvider { get; } public bool TryCreateExtension(Type extensionType, out object extension) { diff --git a/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs b/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs index 254b78f8..97e6bde9 100644 --- a/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs @@ -21,7 +21,7 @@ namespace WixToolsetTest.CoreIntegration { var intermediate1 = new Intermediate("TestIntermediate1", new[] { new IntermediateSection("test1", SectionType.Product, 65001) }, null); var intermediate2 = new Intermediate("TestIntermediate2", new[] { new IntermediateSection("test2", SectionType.Fragment, 65001) }, null); - var serviceProvider = new WixToolsetServiceProvider(); + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); var listener = new TestMessageListener(); var messaging = serviceProvider.GetService(); diff --git a/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs b/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs index eca3aa34..afb93041 100644 --- a/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs @@ -15,7 +15,7 @@ namespace WixToolsetTest.CoreIntegration [Fact] public void GeneratesCorrectCustomActionIdentifiers() { - var serviceProvider = new WixToolsetServiceProvider(); + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); var section = new IntermediateSection("section", SectionType.Fragment, 0); var parseHelper = serviceProvider.GetService(); diff --git a/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs b/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs index 432d025a..b038812d 100644 --- a/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs @@ -21,7 +21,7 @@ namespace WixToolsetTest.CoreIntegration var includeFolder = Path.Combine(folder, "data"); var includeFile = Path.Combine(includeFolder, "Package.wxi"); - var serviceProvider = new WixToolsetServiceProvider(); + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); var context = serviceProvider.GetService(); context.SourcePath = sourcePath; diff --git a/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs b/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs index 3443896b..28c68e99 100644 --- a/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs @@ -15,7 +15,7 @@ namespace WixToolsetTest.CoreIntegration [Fact] public void CanRecursivelyResolveVariables() { - var serviceProvider = new WixToolsetServiceProvider(); + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider(); var variableResolver = serviceProvider.GetService(); var variables = new Dictionary() -- cgit v1.2.3-55-g6feb