Fixes issue with introduced MSDI abstractions where a single implemention is used for two interfaces, ensuring only one singleton instance is created.

This commit is contained in:
Andy Butland
2020-10-30 19:56:26 +01:00
parent bdb8f34da3
commit 98b1798bbe
2 changed files with 17 additions and 5 deletions

View File

@@ -12,6 +12,21 @@ namespace Umbraco.Core
where TImplementing : class, TService
=> services.Replace(ServiceDescriptor.Singleton<TService, TImplementing>());
/// <summary>
/// Registers a unique service as a single instance implementing two interfaces.
/// </summary>
/// <remarks>
/// Hat-tip: https://stackoverflow.com/a/55402016/489433
/// </remarks>
public static void AddUnique<TService1, TService2, TImplementing>(this IServiceCollection services)
where TService1 : class
where TService2 : class
where TImplementing : class, TService1, TService2
{
services.Replace(ServiceDescriptor.Singleton<TService1, TImplementing>());
services.Replace(ServiceDescriptor.Singleton<TService2, TImplementing>(x => (TImplementing)x.GetService<TService1>()));
}
public static void AddUnique<TImplementing>(this IServiceCollection services)
where TImplementing : class
=> services.Replace(ServiceDescriptor.Singleton<TImplementing, TImplementing>());