aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core/WixToolsetServiceProvider.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Core/WixToolsetServiceProvider.cs')
-rw-r--r--src/WixToolset.Core/WixToolsetServiceProvider.cs24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/WixToolset.Core/WixToolsetServiceProvider.cs b/src/WixToolset.Core/WixToolsetServiceProvider.cs
index c7d6ff1d..68def7a8 100644
--- a/src/WixToolset.Core/WixToolsetServiceProvider.cs
+++ b/src/WixToolset.Core/WixToolsetServiceProvider.cs
@@ -10,11 +10,11 @@ namespace WixToolset.Core
10 using WixToolset.Extensibility.Data; 10 using WixToolset.Extensibility.Data;
11 using WixToolset.Extensibility.Services; 11 using WixToolset.Extensibility.Services;
12 12
13 public sealed class WixToolsetServiceProvider : IServiceProvider 13 public sealed class WixToolsetServiceProvider : IWixToolsetCoreServiceProvider
14 { 14 {
15 public WixToolsetServiceProvider() 15 public WixToolsetServiceProvider()
16 { 16 {
17 this.CreationFunctions = new Dictionary<Type, Func<IServiceProvider, Dictionary<Type, object>, object>>(); 17 this.CreationFunctions = new Dictionary<Type, Func<IWixToolsetCoreServiceProvider, Dictionary<Type, object>, object>>();
18 this.Singletons = new Dictionary<Type, object>(); 18 this.Singletons = new Dictionary<Type, object>();
19 19
20 // Singletons. 20 // Singletons.
@@ -67,7 +67,7 @@ namespace WixToolset.Core
67 this.AddService<IVariableResolver>((provider, singletons) => new VariableResolver(provider)); 67 this.AddService<IVariableResolver>((provider, singletons) => new VariableResolver(provider));
68 } 68 }
69 69
70 private Dictionary<Type, Func<IServiceProvider, Dictionary<Type, object>, object>> CreationFunctions { get; } 70 private Dictionary<Type, Func<IWixToolsetCoreServiceProvider, Dictionary<Type, object>, object>> CreationFunctions { get; }
71 71
72 private Dictionary<Type, object> Singletons { get; } 72 private Dictionary<Type, object> Singletons { get; }
73 73
@@ -96,17 +96,31 @@ namespace WixToolset.Core
96 return service != null; 96 return service != null;
97 } 97 }
98 98
99 public bool TryGetService<T>(out T service)
100 where T : class
101 {
102 var success = this.TryGetService(typeof(T), out var untypedService);
103 service = (T)untypedService;
104 return success;
105 }
106
99 public object GetService(Type serviceType) 107 public object GetService(Type serviceType)
100 { 108 {
101 return this.TryGetService(serviceType, out var service) ? service : throw new ArgumentException($"Unknown service type: {serviceType.Name}", nameof(serviceType)); 109 return this.TryGetService(serviceType, out var service) ? service : throw new ArgumentException($"Unknown service type: {serviceType.Name}", nameof(serviceType));
102 } 110 }
103 111
104 public void AddService(Type serviceType, Func<IServiceProvider, Dictionary<Type, object>, object> creationFunction) 112 public T GetService<T>()
113 where T : class
114 {
115 return (T)this.GetService(typeof(T));
116 }
117
118 public void AddService(Type serviceType, Func<IWixToolsetCoreServiceProvider, Dictionary<Type, object>, object> creationFunction)
105 { 119 {
106 this.CreationFunctions[serviceType] = creationFunction; 120 this.CreationFunctions[serviceType] = creationFunction;
107 } 121 }
108 122
109 public void AddService<T>(Func<IServiceProvider, Dictionary<Type, object>, T> creationFunction) 123 public void AddService<T>(Func<IWixToolsetCoreServiceProvider, Dictionary<Type, object>, T> creationFunction)
110 where T : class 124 where T : class
111 { 125 {
112 this.AddService(typeof(T), creationFunction); 126 this.AddService(typeof(T), creationFunction);