From 38d90da4c5aa83575fa85628c55ab64f37fda1be Mon Sep 17 00:00:00 2001 From: Marcus Carey Date: Wed, 17 Sep 2025 18:24:15 -0500 Subject: [PATCH] fix: refactor DefaultJsonPatchGenerator to use IServiceProvider for IJsonPatchWriter instantiation --- src/JsonPatchGenerator/DefaultJsonPatchGenerator.cs | 13 +++++++++---- .../Extensions/ServiceCollectionExtensions.cs | 5 +---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/JsonPatchGenerator/DefaultJsonPatchGenerator.cs b/src/JsonPatchGenerator/DefaultJsonPatchGenerator.cs index c020b7e..bdf4e33 100644 --- a/src/JsonPatchGenerator/DefaultJsonPatchGenerator.cs +++ b/src/JsonPatchGenerator/DefaultJsonPatchGenerator.cs @@ -4,6 +4,7 @@ using Firebend.JsonPatch.Models; using Microsoft.AspNetCore.JsonPatch; using Microsoft.AspNetCore.JsonPatch.Operations; +using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; namespace Firebend.JsonPatch; @@ -11,12 +12,15 @@ namespace Firebend.JsonPatch; public class DefaultJsonPatchGenerator : IJsonPatchGenerator { private readonly IJsonDiffDetector _diffDetector; - private readonly Func _writerFactory; + private readonly IServiceProvider _serviceProvider; private readonly IJsonDiffSettingsProvider _settings; - public DefaultJsonPatchGenerator(IJsonDiffDetector diffDetector, Func writerFactory, IJsonDiffSettingsProvider settings) + + public DefaultJsonPatchGenerator(IJsonDiffDetector diffDetector, + IServiceProvider serviceProvider, + IJsonDiffSettingsProvider settings) { _diffDetector = diffDetector; - _writerFactory = writerFactory; + _serviceProvider = serviceProvider; _settings = settings; } @@ -42,7 +46,8 @@ public JsonPatchDocument Generate(T original, T modified) if (!diffs.Any()) { return new(); } - var writer = _writerFactory(); + using var scope = _serviceProvider.CreateScope(); + var writer = scope.ServiceProvider.GetRequiredService(); foreach (var jsonDiff in diffs) { diff --git a/src/JsonPatchGenerator/Extensions/ServiceCollectionExtensions.cs b/src/JsonPatchGenerator/Extensions/ServiceCollectionExtensions.cs index 1161260..ac6032f 100644 --- a/src/JsonPatchGenerator/Extensions/ServiceCollectionExtensions.cs +++ b/src/JsonPatchGenerator/Extensions/ServiceCollectionExtensions.cs @@ -46,10 +46,7 @@ public static IServiceCollection AddJsonPatchGenerator(this IServiceCollection c collection.TryAddSingleton(new JsonDiffSettingsProvider(settings)); collection.TryAddTransient(); - collection.TryAddTransient(sp => - new DefaultJsonPatchGenerator(sp.GetRequiredService(), - sp.GetRequiredService, - sp.GetRequiredService())); + collection.TryAddTransient(); collection.TryAddTransient(); return collection;