//
// 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;
}
}