~ruther/NosSmooth.Local

c13e87cd3d3bfae8f44f4f8c6017735d4bcedae5 — Rutherther 2 years ago fda69e1
fix(shared): correctly share SharedHookManager
M src/Extensions/NosSmooth.Extensions.SharedBinding/Extensions/ServiceCollectionExtensions.cs => src/Extensions/NosSmooth.Extensions.SharedBinding/Extensions/ServiceCollectionExtensions.cs +14 -10
@@ 10,6 10,7 @@ using Microsoft.Extensions.DependencyInjection.Extensions;
using NosSmooth.Data.NOSFiles;
using NosSmooth.Extensions.SharedBinding.Hooks;
using NosSmooth.LocalBinding;
using NosSmooth.LocalBinding.Extensions;
using NosSmooth.LocalBinding.Hooks;
using NosSmooth.PacketSerializer.Packets;



@@ 27,19 28,22 @@ public static class ServiceCollectionExtensions
    /// <returns>The same collection.</returns>
    public static IServiceCollection ShareHooks(this IServiceCollection serviceCollection)
    {
        var original = serviceCollection
        var originalHookManager = serviceCollection
            .Last(x => x.ServiceType == typeof(IHookManager));
        serviceCollection.Configure<SharedOptions>(o => o.AddDescriptor(original));

        var sharedHookManager = ServiceDescriptor.Singleton<SharedHookManager>
        (
            p =>
            {
                var sharedHookManager = p.GetRequiredService<SharedManager>().GetShared<IHookManager>(p);
                return new SharedHookManager(sharedHookManager);
            }
        );

        return serviceCollection
            .AddSingleton<SharedHookManager>
            (
                p =>
                {
                    var sharedHookManager = p.GetRequiredService<SharedManager>().GetShared<IHookManager>(p);
                    return new SharedHookManager(sharedHookManager);
                }
            )
            .Configure<SharedOptions>(o => o.AddDescriptor(originalHookManager))
            .Configure<SharedOptions>(o => o.AddDescriptor(sharedHookManager))
            .AddSingleton<SharedHookManager>(p => SharedManager.Instance.GetShared<SharedHookManager>(p))
            .Replace(ServiceDescriptor.Singleton<IHookManager, SingleHookManager>());
    }


Do not follow this link