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/IWixToolsetServiceProvider.cs | 34 --------------- .../Services/IWixtoolsetCoreServiceProvider.cs | 2 +- .../Services/ServiceProviderExtensions.cs | 48 ++++++++++++++++++++++ 3 files changed, 49 insertions(+), 35 deletions(-) delete mode 100644 src/WixToolset.Extensibility/Services/IWixToolsetServiceProvider.cs create mode 100644 src/WixToolset.Extensibility/Services/ServiceProviderExtensions.cs (limited to 'src/WixToolset.Extensibility/Services') diff --git a/src/WixToolset.Extensibility/Services/IWixToolsetServiceProvider.cs b/src/WixToolset.Extensibility/Services/IWixToolsetServiceProvider.cs deleted file mode 100644 index 0315f7ed..00000000 --- a/src/WixToolset.Extensibility/Services/IWixToolsetServiceProvider.cs +++ /dev/null @@ -1,34 +0,0 @@ -// 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. - /// - public interface IWixToolsetServiceProvider : IServiceProvider - { - /// - /// Gets a service from the service provider. - /// - /// Type of service to get. - T GetService() where T : class; - - /// - /// Gets a service from the service provider. - /// - /// Type of service to get. - /// Retrieved service. - /// True if the service was found, otherwise false - bool TryGetService(Type serviceType, out object service); - - /// - /// Gets a service from the service provider. - /// - /// Type of service to get. - /// Retrieved service. - /// True if the service was found, otherwise false - bool TryGetService(out T service) where T : class; - } -} diff --git a/src/WixToolset.Extensibility/Services/IWixtoolsetCoreServiceProvider.cs b/src/WixToolset.Extensibility/Services/IWixtoolsetCoreServiceProvider.cs index 2d0450dc..f5fb28fb 100644 --- a/src/WixToolset.Extensibility/Services/IWixtoolsetCoreServiceProvider.cs +++ b/src/WixToolset.Extensibility/Services/IWixtoolsetCoreServiceProvider.cs @@ -8,7 +8,7 @@ namespace WixToolset.Extensibility.Services /// /// The core of the service provider used to add services to the service provider. /// - public interface IWixToolsetCoreServiceProvider : IWixToolsetServiceProvider + public interface IWixToolsetCoreServiceProvider : IServiceProvider { /// /// Adds a service to the service locator. 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