From 4f9265240bd7ead2e1c729612f5c3dee15ed41bd Mon Sep 17 00:00:00 2001 From: Vitor Rodrigues Date: Tue, 13 Jul 2021 01:47:26 +0200 Subject: [PATCH] #10648: Updated public IUmbracoBuilder extension methods to allow chaining --- .../Composing/CompositionExtensions.cs | 9 ++- .../UmbracoBuilder.DistributedCache.cs | 46 +++++++----- .../UmbracoBuilder.Uniques.cs | 70 ++++++++++++------- .../WebsiteUmbracoBuilderExtensions.cs | 18 +++-- 4 files changed, 91 insertions(+), 52 deletions(-) diff --git a/src/Umbraco.Core/Composing/CompositionExtensions.cs b/src/Umbraco.Core/Composing/CompositionExtensions.cs index 74f30b81b6..d087af77d8 100644 --- a/src/Umbraco.Core/Composing/CompositionExtensions.cs +++ b/src/Umbraco.Core/Composing/CompositionExtensions.cs @@ -11,9 +11,10 @@ namespace Umbraco.Extensions /// /// The builder. /// A function creating a published snapshot service. - public static void SetPublishedSnapshotService(this IUmbracoBuilder builder, Func factory) + public static IUmbracoBuilder SetPublishedSnapshotService(this IUmbracoBuilder builder, Func factory) { builder.Services.AddUnique(factory); + return builder; } /// @@ -21,10 +22,11 @@ namespace Umbraco.Extensions /// /// The type of the published snapshot service. /// The builder. - public static void SetPublishedSnapshotService(this IUmbracoBuilder builder) + public static IUmbracoBuilder SetPublishedSnapshotService(this IUmbracoBuilder builder) where T : class, IPublishedSnapshotService { builder.Services.AddUnique(); + return builder; } /// @@ -32,9 +34,10 @@ namespace Umbraco.Extensions /// /// The builder. /// A published snapshot service. - public static void SetPublishedSnapshotService(this IUmbracoBuilder builder, IPublishedSnapshotService service) + public static IUmbracoBuilder SetPublishedSnapshotService(this IUmbracoBuilder builder, IPublishedSnapshotService service) { builder.Services.AddUnique(service); + return builder; } } } diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.DistributedCache.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.DistributedCache.cs index 05dba2cc0f..71ea85d80f 100644 --- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.DistributedCache.cs +++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.DistributedCache.cs @@ -2,12 +2,8 @@ using System; using Microsoft.Extensions.DependencyInjection; using Umbraco.Cms.Core.Cache; using Umbraco.Cms.Core.DependencyInjection; -using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Notifications; -using Umbraco.Cms.Core.PublishedCache; -using Umbraco.Cms.Core.Services.Changes; using Umbraco.Cms.Core.Sync; -using Umbraco.Cms.Infrastructure.Search; using Umbraco.Cms.Infrastructure.Sync; using Umbraco.Extensions; @@ -40,49 +36,67 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// The type of the server registrar. /// The builder. - public static void SetServerRegistrar(this IUmbracoBuilder builder) + public static IUmbracoBuilder SetServerRegistrar(this IUmbracoBuilder builder) where T : class, IServerRoleAccessor - => builder.Services.AddUnique(); + { + builder.Services.AddUnique(); + return builder; + } /// /// Sets the server registrar. /// /// The builder. /// A function creating a server registrar. - public static void SetServerRegistrar(this IUmbracoBuilder builder, Func factory) - => builder.Services.AddUnique(factory); + public static IUmbracoBuilder SetServerRegistrar(this IUmbracoBuilder builder, Func factory) + { + builder.Services.AddUnique(factory); + return builder; + } /// /// Sets the server registrar. /// /// The builder. /// A server registrar. - public static void SetServerRegistrar(this IUmbracoBuilder builder, IServerRoleAccessor registrar) - => builder.Services.AddUnique(registrar); + public static IUmbracoBuilder SetServerRegistrar(this IUmbracoBuilder builder, IServerRoleAccessor registrar) + { + builder.Services.AddUnique(registrar); + return builder; + } /// /// Sets the server messenger. /// /// The type of the server registrar. /// The builder. - public static void SetServerMessenger(this IUmbracoBuilder builder) + public static IUmbracoBuilder SetServerMessenger(this IUmbracoBuilder builder) where T : class, IServerMessenger - => builder.Services.AddUnique(); + { + builder.Services.AddUnique(); + return builder; + } /// /// Sets the server messenger. /// /// The builder. /// A function creating a server messenger. - public static void SetServerMessenger(this IUmbracoBuilder builder, Func factory) - => builder.Services.AddUnique(factory); + public static IUmbracoBuilder SetServerMessenger(this IUmbracoBuilder builder, Func factory) + { + builder.Services.AddUnique(factory); + return builder; + } /// /// Sets the server messenger. /// /// The builder. /// A server messenger. - public static void SetServerMessenger(this IUmbracoBuilder builder, IServerMessenger registrar) - => builder.Services.AddUnique(registrar); + public static IUmbracoBuilder SetServerMessenger(this IUmbracoBuilder builder, IServerMessenger registrar) + { + builder.Services.AddUnique(registrar); + return builder; + } } } diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Uniques.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Uniques.cs index cbbaa6a3e0..b311b1f0da 100644 --- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Uniques.cs +++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Uniques.cs @@ -1,6 +1,5 @@ using System; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.DependencyInjection.Extensions; using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Core.Dictionary; using Umbraco.Cms.Core.IO; @@ -21,10 +20,11 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// The type of the factory. /// The builder. - public static void SetCultureDictionaryFactory(this IUmbracoBuilder builder) + public static IUmbracoBuilder SetCultureDictionaryFactory(this IUmbracoBuilder builder) where T : class, ICultureDictionaryFactory { builder.Services.AddUnique(); + return builder; } /// @@ -32,9 +32,10 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// The builder. /// A function creating a culture dictionary factory. - public static void SetCultureDictionaryFactory(this IUmbracoBuilder builder, Func factory) + public static IUmbracoBuilder SetCultureDictionaryFactory(this IUmbracoBuilder builder, Func factory) { builder.Services.AddUnique(factory); + return builder; } /// @@ -42,9 +43,10 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// The builder. /// A factory. - public static void SetCultureDictionaryFactory(this IUmbracoBuilder builder, ICultureDictionaryFactory factory) + public static IUmbracoBuilder SetCultureDictionaryFactory(this IUmbracoBuilder builder, ICultureDictionaryFactory factory) { builder.Services.AddUnique(factory); + return builder; } /// @@ -52,10 +54,11 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// The type of the factory. /// The builder. - public static void SetPublishedContentModelFactory(this IUmbracoBuilder builder) + public static IUmbracoBuilder SetPublishedContentModelFactory(this IUmbracoBuilder builder) where T : class, IPublishedModelFactory { builder.Services.AddUnique(); + return builder; } /// @@ -63,9 +66,10 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// The builder. /// A function creating a published content model factory. - public static void SetPublishedContentModelFactory(this IUmbracoBuilder builder, Func factory) + public static IUmbracoBuilder SetPublishedContentModelFactory(this IUmbracoBuilder builder, Func factory) { builder.Services.AddUnique(factory); + return builder; } /// @@ -73,9 +77,10 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// The builder. /// A published content model factory. - public static void SetPublishedContentModelFactory(this IUmbracoBuilder builder, IPublishedModelFactory factory) + public static IUmbracoBuilder SetPublishedContentModelFactory(this IUmbracoBuilder builder, IPublishedModelFactory factory) { builder.Services.AddUnique(factory); + return builder; } /// @@ -83,10 +88,11 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// The type of the short string helper. /// The builder. - public static void SetShortStringHelper(this IUmbracoBuilder builder) + public static IUmbracoBuilder SetShortStringHelper(this IUmbracoBuilder builder) where T : class, IShortStringHelper { builder.Services.AddUnique(); + return builder; } /// @@ -94,9 +100,10 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// The builder. /// A function creating a short string helper. - public static void SetShortStringHelper(this IUmbracoBuilder builder, Func factory) + public static IUmbracoBuilder SetShortStringHelper(this IUmbracoBuilder builder, Func factory) { builder.Services.AddUnique(factory); + return builder; } /// @@ -104,9 +111,10 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// A builder. /// A short string helper. - public static void SetShortStringHelper(this IUmbracoBuilder builder, IShortStringHelper helper) + public static IUmbracoBuilder SetShortStringHelper(this IUmbracoBuilder builder, IShortStringHelper helper) { builder.Services.AddUnique(helper); + return builder; } /// @@ -114,19 +122,23 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// A builder. /// Factory method to create an IFileSystem implementation used in the MediaFileManager - public static void SetMediaFileSystem(this IUmbracoBuilder builder, - Func filesystemFactory) => builder.Services.AddUnique( - provider => - { - IFileSystem filesystem = filesystemFactory(provider); - // We need to use the Filesystems to create a shadow wrapper, - // because shadow wrapper requires the IsScoped delegate from the FileSystems. - // This is used by the scope provider when taking control of the filesystems. - FileSystems fileSystems = provider.GetRequiredService(); - IFileSystem shadow = fileSystems.CreateShadowWrapper(filesystem, "media"); + public static IUmbracoBuilder SetMediaFileSystem(this IUmbracoBuilder builder, + Func filesystemFactory) + { + builder.Services.AddUnique( + provider => + { + IFileSystem filesystem = filesystemFactory(provider); + // We need to use the Filesystems to create a shadow wrapper, + // because shadow wrapper requires the IsScoped delegate from the FileSystems. + // This is used by the scope provider when taking control of the filesystems. + FileSystems fileSystems = provider.GetRequiredService(); + IFileSystem shadow = fileSystems.CreateShadowWrapper(filesystem, "media"); - return provider.CreateInstance(shadow); - }); + return provider.CreateInstance(shadow); + }); + return builder; + } /// /// Register FileSystems with a method to configure the . @@ -135,7 +147,7 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// Method that configures the . /// Throws exception if is null. /// Throws exception if full path can't be resolved successfully. - public static void ConfigureFileSystems(this IUmbracoBuilder builder, + public static IUmbracoBuilder ConfigureFileSystems(this IUmbracoBuilder builder, Action configure) { if (configure == null) @@ -150,6 +162,7 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection configure(provider, fileSystems); return fileSystems; }); + return builder; } /// @@ -157,10 +170,11 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// The type of the log viewer. /// The builder. - public static void SetLogViewer(this IUmbracoBuilder builder) + public static IUmbracoBuilder SetLogViewer(this IUmbracoBuilder builder) where T : class, ILogViewer { builder.Services.AddUnique(); + return builder; } /// @@ -168,19 +182,21 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection /// /// The builder. /// A function creating a log viewer. - public static void SetLogViewer(this IUmbracoBuilder builder, Func factory) + public static IUmbracoBuilder SetLogViewer(this IUmbracoBuilder builder, Func factory) { builder.Services.AddUnique(factory); + return builder; } /// /// Sets the log viewer. /// /// A builder. - /// A log viewer. - public static void SetLogViewer(this IUmbracoBuilder builder, ILogViewer viewer) + /// A log viewer. + public static IUmbracoBuilder SetLogViewer(this IUmbracoBuilder builder, ILogViewer viewer) { builder.Services.AddUnique(viewer); + return builder; } } } diff --git a/src/Umbraco.Web.Website/Extensions/WebsiteUmbracoBuilderExtensions.cs b/src/Umbraco.Web.Website/Extensions/WebsiteUmbracoBuilderExtensions.cs index 72994992fa..65bff41a59 100644 --- a/src/Umbraco.Web.Website/Extensions/WebsiteUmbracoBuilderExtensions.cs +++ b/src/Umbraco.Web.Website/Extensions/WebsiteUmbracoBuilderExtensions.cs @@ -16,10 +16,11 @@ namespace Umbraco.Extensions /// /// The type of the content last chance finder. /// The builder. - public static void SetContentLastChanceFinder(this IUmbracoBuilder builder) + public static IUmbracoBuilder SetContentLastChanceFinder(this IUmbracoBuilder builder) where T : class, IContentLastChanceFinder { builder.Services.AddUnique(); + return builder; } /// @@ -27,9 +28,10 @@ namespace Umbraco.Extensions /// /// The builder. /// A function creating a last chance finder. - public static void SetContentLastChanceFinder(this IUmbracoBuilder builder, Func factory) + public static IUmbracoBuilder SetContentLastChanceFinder(this IUmbracoBuilder builder, Func factory) { builder.Services.AddUnique(factory); + return builder; } /// @@ -37,9 +39,10 @@ namespace Umbraco.Extensions /// /// The builder. /// A last chance finder. - public static void SetContentLastChanceFinder(this IUmbracoBuilder builder, IContentLastChanceFinder finder) + public static IUmbracoBuilder SetContentLastChanceFinder(this IUmbracoBuilder builder, IContentLastChanceFinder finder) { builder.Services.AddUnique(finder); + return builder; } /// @@ -47,10 +50,11 @@ namespace Umbraco.Extensions /// /// The type of the site domain helper. /// - public static void SetSiteDomainHelper(this IUmbracoBuilder builder) + public static IUmbracoBuilder SetSiteDomainHelper(this IUmbracoBuilder builder) where T : class, ISiteDomainMapper { builder.Services.AddUnique(); + return builder; } /// @@ -58,9 +62,10 @@ namespace Umbraco.Extensions /// /// The builder. /// A function creating a helper. - public static void SetSiteDomainHelper(this IUmbracoBuilder builder, Func factory) + public static IUmbracoBuilder SetSiteDomainHelper(this IUmbracoBuilder builder, Func factory) { builder.Services.AddUnique(factory); + return builder; } /// @@ -68,9 +73,10 @@ namespace Umbraco.Extensions /// /// The builder. /// A helper. - public static void SetSiteDomainHelper(this IUmbracoBuilder builder, ISiteDomainMapper helper) + public static IUmbracoBuilder SetSiteDomainHelper(this IUmbracoBuilder builder, ISiteDomainMapper helper) { builder.Services.AddUnique(helper); + return builder; } #endregion