From 9aae370eee18b4c87300f333fa52f3cd0d7f34d1 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Sun, 14 Mar 2021 11:17:20 -0700 Subject: 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. --- .../Services/ServiceProviderExtensions.cs | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/WixToolset.Extensibility/Services/ServiceProviderExtensions.cs (limited to 'src/WixToolset.Extensibility/Services/ServiceProviderExtensions.cs') 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 @@ +// 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.Extensibility.Services +{ + using System; + + /// + /// Service provider extensions. + /// + public static class ServiceProviderExtensions + { + /// + /// Gets a service from the service provider. + /// + /// Type of service to get. + /// Service provider. + public static T GetService(this IServiceProvider provider) where T : class + { + return provider.GetService(typeof(T)) as T; + } + + /// + /// Gets a service from the service provider. + /// + /// Service provider. + /// Type of service to get. + /// Retrieved service. + /// True if the service was found, otherwise false + public static bool TryGetService(this IServiceProvider provider, Type serviceType, out object service) + { + service = provider.GetService(serviceType); + return service != null; + } + + /// + /// Gets a service from the service provider. + /// + /// Type of service to get. + /// Service provider. + /// Retrieved service. + /// True if the service was found, otherwise false + public static bool TryGetService(this IServiceProvider provider, out T service) where T : class + { + service = provider.GetService(typeof(T)) as T; + return service != null; + } + } +} -- cgit v1.2.3-55-g6feb