aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Extensibility/Services/ServiceProviderExtensions.cs
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2021-03-14 11:17:20 -0700
committerRob Mensching <rob@firegiant.com>2021-03-14 11:28:04 -0700
commit9aae370eee18b4c87300f333fa52f3cd0d7f34d1 (patch)
tree27aae273837bb9041e7d509c410910a6df05796c /src/WixToolset.Extensibility/Services/ServiceProviderExtensions.cs
parentf4af6bf27abaaac7f0508ce2beafb31b5a64b53f (diff)
downloadwix-9aae370eee18b4c87300f333fa52f3cd0d7f34d1.tar.gz
wix-9aae370eee18b4c87300f333fa52f3cd0d7f34d1.tar.bz2
wix-9aae370eee18b4c87300f333fa52f3cd0d7f34d1.zip
Use extension methods instead of a custom interface for IServiceProvider
There are several helpful methods for getting services out of an IServiceProvider. Instead of introducing a custom interface to inject those methods into the inheritance tree, this change uses extension methods to add the helper methods and reduce the number of custom interfaces.
Diffstat (limited to 'src/WixToolset.Extensibility/Services/ServiceProviderExtensions.cs')
-rw-r--r--src/WixToolset.Extensibility/Services/ServiceProviderExtensions.cs48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/WixToolset.Extensibility/Services/ServiceProviderExtensions.cs b/src/WixToolset.Extensibility/Services/ServiceProviderExtensions.cs
new file mode 100644
index 00000000..68484d09
--- /dev/null
+++ b/src/WixToolset.Extensibility/Services/ServiceProviderExtensions.cs
@@ -0,0 +1,48 @@
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
3namespace WixToolset.Extensibility.Services
4{
5 using System;
6
7 /// <summary>
8 /// Service provider extensions.
9 /// </summary>
10 public static class ServiceProviderExtensions
11 {
12 /// <summary>
13 /// Gets a service from the service provider.
14 /// </summary>
15 /// <typeparam name="T">Type of service to get.</typeparam>
16 /// <param name="provider">Service provider.</param>
17 public static T GetService<T>(this IServiceProvider provider) where T : class
18 {
19 return provider.GetService(typeof(T)) as T;
20 }
21
22 /// <summary>
23 /// Gets a service from the service provider.
24 /// </summary>
25 /// <param name="provider">Service provider.</param>
26 /// <param name="serviceType">Type of service to get.</param>
27 /// <param name="service">Retrieved service.</param>
28 /// <returns>True if the service was found, otherwise false</returns>
29 public static bool TryGetService(this IServiceProvider provider, Type serviceType, out object service)
30 {
31 service = provider.GetService(serviceType);
32 return service != null;
33 }
34
35 /// <summary>
36 /// Gets a service from the service provider.
37 /// </summary>
38 /// <typeparam name="T">Type of service to get.</typeparam>
39 /// <param name="provider">Service provider.</param>
40 /// <param name="service">Retrieved service.</param>
41 /// <returns>True if the service was found, otherwise false</returns>
42 public static bool TryGetService<T>(this IServiceProvider provider, out T service) where T : class
43 {
44 service = provider.GetService(typeof(T)) as T;
45 return service != null;
46 }
47 }
48}