diff options
Diffstat (limited to 'src/WixToolset.Core/WixToolsetServiceProvider.cs')
-rw-r--r-- | src/WixToolset.Core/WixToolsetServiceProvider.cs | 24 |
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); |