From ebdad9f91e8ad15760681b2fc4c678161d410c76 Mon Sep 17 00:00:00 2001 From: Paul Johnson Date: Mon, 2 Nov 2020 10:54:29 +0000 Subject: [PATCH] Add additional "mutliple unique" registrations and rename extension for clarity. --- src/Umbraco.Core/ServiceCollectionExtensions.cs | 11 ++++------- src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs | 8 +++----- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Core/ServiceCollectionExtensions.cs b/src/Umbraco.Core/ServiceCollectionExtensions.cs index e6fcd43af1..d1c89ea17e 100644 --- a/src/Umbraco.Core/ServiceCollectionExtensions.cs +++ b/src/Umbraco.Core/ServiceCollectionExtensions.cs @@ -13,18 +13,15 @@ namespace Umbraco.Core => services.Replace(ServiceDescriptor.Singleton()); /// - /// Registers a unique service as a single instance implementing two interfaces. + /// Registers a singleton instance against multiple interfaces. /// - /// - /// Hat-tip: https://stackoverflow.com/a/55402016/489433 - /// - public static void AddUnique(this IServiceCollection services) + public static void AddMultipleUnique(this IServiceCollection services) where TService1 : class where TService2 : class where TImplementing : class, TService1, TService2 { - services.Replace(ServiceDescriptor.Singleton()); - services.Replace(ServiceDescriptor.Singleton(x => (TImplementing)x.GetService())); + services.AddUnique(); + services.AddUnique(factory => (TImplementing) factory.GetRequiredService()); } public static void AddUnique(this IServiceCollection services) diff --git a/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs b/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs index 832cfdb488..2ba38b6e02 100644 --- a/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs +++ b/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs @@ -49,13 +49,12 @@ namespace Umbraco.Web.Common.Runtime composition.Services.AddUnique(); // Our own netcore implementations - composition.Services.AddUnique(); - composition.Services.AddUnique(); + composition.Services.AddMultipleUnique(); composition.Services.AddUnique(); // The umbraco request lifetime - composition.Services.AddUnique(); + composition.Services.AddMultipleUnique(); // Password hasher composition.Services.AddUnique(); @@ -64,8 +63,7 @@ namespace Umbraco.Web.Common.Runtime composition.Services.AddTransient(); composition.Services.AddUnique(); - composition.Services.AddUnique(); - composition.Services.AddUnique(); + composition.Services.AddMultipleUnique(); composition.Services.AddUnique();