// // ServiceCollectionExtensions.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using NosSmooth.Data.NOSFiles; using NosSmooth.LocalBinding; using NosSmooth.PacketSerializer.Packets; namespace NosSmooth.Extensions.SharedBinding.Extensions; /// /// Extension methods for . /// public static class ServiceCollectionExtensions { /// /// Replaces /// with shared equivalent. That allows for multiple programs injected inside NosTale. /// /// The collection. /// The same collection. public static IServiceCollection ShareBinding(this IServiceCollection serviceCollection) { var original = serviceCollection .Last(x => x.ServiceType == typeof(NosBindingManager)); return serviceCollection .Configure(o => o.BindingDescriptor = original) .Replace (ServiceDescriptor.Singleton(p => SharedManager.Instance.GetNosBindingManager(p))); } /// /// Replaces /// with shared equivalent. That allows for multiple programs injected inside NosTale. /// /// The collection. /// The same collection. public static IServiceCollection ShareFileManager(this IServiceCollection serviceCollection) { var original = serviceCollection .Last(x => x.ServiceType == typeof(NostaleDataFilesManager)); return serviceCollection .Configure(o => o.FileDescriptor = original) .Replace (ServiceDescriptor.Singleton(p => SharedManager.Instance.GetFilesManager(p))); } /// /// Replaces /// with shared equivalent. That allows for multiple programs injected inside NosTale. /// /// The collection. /// The same collection. public static IServiceCollection SharePacketRepository(this IServiceCollection serviceCollection) { var original = serviceCollection .Last(x => x.ServiceType == typeof(IPacketTypesRepository)); return serviceCollection .Configure(o => o.PacketRepositoryDescriptor = original) .Replace ( ServiceDescriptor.Singleton(p => SharedManager.Instance.GetPacketRepository(p)) ); } /// /// Replaces , and /// with their shared equvivalents. That allows for multiple programs injected inside NosTale. /// /// The collection. /// The same collection. public static IServiceCollection ShareNosSmooth(this IServiceCollection serviceCollection) { if (serviceCollection.Any(x => x.ServiceType == typeof(NosBindingManager))) { serviceCollection.ShareBinding(); } if (serviceCollection.Any(x => x.ServiceType == typeof(NostaleDataFilesManager))) { serviceCollection.ShareFileManager(); } if (serviceCollection.Any(x => x.ServiceType == typeof(IPacketTypesRepository))) { serviceCollection.SharePacketRepository(); } return serviceCollection; } }