diff --git a/src/Umbraco.Core/ServiceCollectionExtensions.cs b/src/Umbraco.Core/ServiceCollectionExtensions.cs index 3202cc3a38..e6fcd43af1 100644 --- a/src/Umbraco.Core/ServiceCollectionExtensions.cs +++ b/src/Umbraco.Core/ServiceCollectionExtensions.cs @@ -12,6 +12,21 @@ namespace Umbraco.Core where TImplementing : class, TService => services.Replace(ServiceDescriptor.Singleton()); + /// + /// Registers a unique service as a single instance implementing two interfaces. + /// + /// + /// Hat-tip: https://stackoverflow.com/a/55402016/489433 + /// + public static void AddUnique(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())); + } + public static void AddUnique(this IServiceCollection services) where TImplementing : class => services.Replace(ServiceDescriptor.Singleton()); diff --git a/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs b/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs index 39742dcb0d..832cfdb488 100644 --- a/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs +++ b/src/Umbraco.Web.Common/Runtime/AspNetCoreComposer.cs @@ -55,13 +55,11 @@ namespace Umbraco.Web.Common.Runtime composition.Services.AddUnique(); // The umbraco request lifetime - composition.Services.AddUnique(); - composition.Services.AddUnique(); + composition.Services.AddUnique(); - //Password hasher + // Password hasher composition.Services.AddUnique(); - composition.Services.AddUnique(); composition.Services.AddTransient(); composition.Services.AddUnique(); @@ -76,7 +74,6 @@ namespace Umbraco.Web.Common.Runtime composition.Services.AddUnique(); composition.Services.AddUnique(); - // register the umbraco context factory composition.Services.AddUnique(); composition.Services.AddUnique();