@joebigelow / wix / commits / 7027e259

Hide the concrete implementation of the service provider interfaces by adding WixToolsetServiceProviderFactory. This forces consumers to code to the interfaces.

Hide the concrete implementation of the service provider interfaces by adding WixToolsetServiceProviderFactory. This forces consumers to code to the interfaces.

Sean Hall committed Apr 2, 2020 at 21:00 UTC 7027e259b8987e425362ee8248e5d0efe8003d51
9 files changed +27 -12
src/WixToolset.Core.TestPackage/WixRunner.cs
+2 -2
@@ -12,13 +12,13 @@ namespace WixToolset.Core.TestPackage
12 {
13 public static int Execute(string[] args, out List<Message> messages)
14 {
15 - var serviceProvider = new WixToolsetServiceProvider();
15 + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
16 return Execute(args, serviceProvider, out messages);
17 }
18
19 public static WixRunnerResult Execute(params string[] args)
20 {
21 - var serviceProvider = new WixToolsetServiceProvider();
21 + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
22 var exitCode = Execute(args, serviceProvider, out var messages);
23 return new WixRunnerResult { ExitCode = exitCode, Messages = messages.ToArray() };
24 }
src/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs
+3 -3
@@ -16,12 +16,12 @@ namespace WixToolset.Core.ExtensibilityServices
16 private List<IExtensionFactory> extensionFactories = new List<IExtensionFactory>();
17 private Dictionary<Type, List<object>> loadedExtensionsByType = new Dictionary<Type, List<object>>();
18
19 - public ExtensionManager(IServiceProvider serviceProvider)
19 + public ExtensionManager(IWixToolsetCoreServiceProvider serviceProvider)
20 {
21 this.ServiceProvider = serviceProvider;
22 }
23
24 - private IServiceProvider ServiceProvider { get; }
24 + private IWixToolsetCoreServiceProvider ServiceProvider { get; }
25
26 public void Add(Assembly extensionAssembly)
27 {
@@ -33,7 +33,7 @@ namespace WixToolset.Core.ExtensibilityServices
33
34 private IExtensionFactory CreateExtensionFactory(Type type)
35 {
36 - var constructor = type.GetConstructor(new[] { typeof(IServiceProvider) });
36 + var constructor = type.GetConstructor(new[] { typeof(IWixToolsetCoreServiceProvider) });
37 if (constructor != null)
38 {
39 return (IExtensionFactory)constructor.Invoke(new[] { this.ServiceProvider });
src/WixToolset.Core/WixToolsetServiceProvider.cs
+1 -1
@@ -10,7 +10,7 @@ namespace WixToolset.Core
10 using WixToolset.Extensibility.Data;
11 using WixToolset.Extensibility.Services;
12
13 - public sealed class WixToolsetServiceProvider : IWixToolsetCoreServiceProvider
13 + internal class WixToolsetServiceProvider : IWixToolsetCoreServiceProvider
14 {
15 public WixToolsetServiceProvider()
16 {
src/WixToolset.Core/WixToolsetServiceProviderFactory.cs new
+14
@@ -0,0 +1,14 @@
1 +// 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.
2 +
3 +namespace WixToolset.Core
4 +{
5 + using WixToolset.Extensibility.Services;
6 +
7 + public static class WixToolsetServiceProviderFactory
8 + {
9 + public static IWixToolsetCoreServiceProvider CreateServiceProvider()
10 + {
11 + return new WixToolsetServiceProvider();
12 + }
13 + }
14 +}
src/test/Example.Extension/ExampleExtensionFactory.cs
+3 -2
@@ -4,12 +4,13 @@ namespace Example.Extension
4 {
5 using System;
6 using WixToolset.Extensibility;
7 + using WixToolset.Extensibility.Services;
8
9 public class ExampleExtensionFactory : IExtensionFactory
10 {
11 private ExamplePreprocessorExtensionAndCommandLine preprocessorExtension;
12
12 - public ExampleExtensionFactory(IServiceProvider serviceProvider)
13 + public ExampleExtensionFactory(IWixToolsetCoreServiceProvider serviceProvider)
14 {
15 this.ServiceProvider = serviceProvider;
16 }
@@ -17,7 +18,7 @@ namespace Example.Extension
18 /// <summary>
19 /// This exists just to show it is possible to get a service provider to the extension factory.
20 /// </summary>
20 - private IServiceProvider ServiceProvider { get; }
21 + private IWixToolsetCoreServiceProvider ServiceProvider { get; }
22
23 public bool TryCreateExtension(Type extensionType, out object extension)
24 {
src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs
+1 -1
@@ -21,7 +21,7 @@ namespace WixToolsetTest.CoreIntegration
21 {
22 var intermediate1 = new Intermediate("TestIntermediate1", new[] { new IntermediateSection("test1", SectionType.Product, 65001) }, null);
23 var intermediate2 = new Intermediate("TestIntermediate2", new[] { new IntermediateSection("test2", SectionType.Fragment, 65001) }, null);
24 - var serviceProvider = new WixToolsetServiceProvider();
24 + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
25
26 var listener = new TestMessageListener();
27 var messaging = serviceProvider.GetService<IMessaging>();
src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs
+1 -1
@@ -15,7 +15,7 @@ namespace WixToolsetTest.CoreIntegration
15 [Fact]
16 public void GeneratesCorrectCustomActionIdentifiers()
17 {
18 - var serviceProvider = new WixToolsetServiceProvider();
18 + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
19 var section = new IntermediateSection("section", SectionType.Fragment, 0);
20 var parseHelper = serviceProvider.GetService<IParseHelper>();
21
src/test/WixToolsetTest.CoreIntegration/PreprocessorFixture.cs
+1 -1
@@ -21,7 +21,7 @@ namespace WixToolsetTest.CoreIntegration
21 var includeFolder = Path.Combine(folder, "data");
22 var includeFile = Path.Combine(includeFolder, "Package.wxi");
23
24 - var serviceProvider = new WixToolsetServiceProvider();
24 + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
25
26 var context = serviceProvider.GetService<IPreprocessContext>();
27 context.SourcePath = sourcePath;
src/test/WixToolsetTest.CoreIntegration/VariableResolverFixture.cs
+1 -1
@@ -15,7 +15,7 @@ namespace WixToolsetTest.CoreIntegration
15 [Fact]
16 public void CanRecursivelyResolveVariables()
17 {
18 - var serviceProvider = new WixToolsetServiceProvider();
18 + var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
19 var variableResolver = serviceProvider.GetService<IVariableResolver>();
20
21 var variables = new Dictionary<string, BindVariable>()