using MAX.Core.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
namespace MAX.Framework.DependencyInjection
{
///
/// 将 适配到 Microsoft.Extensions.DependencyInjection
///
internal sealed class ServiceRegistrarProxy : IServiceRegistrar
{
private readonly IServiceCollection _services;
public ServiceRegistrarProxy(IServiceCollection services)
{
_services = services;
}
public void RegisterSingleton() where TService : class where TImplementation : class, TService
{
_services.AddSingleton();
}
public void RegisterSingleton(TService instance) where TService : class
{
_services.AddSingleton(instance);
}
public void RegisterSingleton(Func factory) where TService : class
{
_services.AddSingleton(factory);
}
public void RegisterSingleton(object? serviceKey) where TService : class where TImplementation : class, TService
{
_services.AddKeyedSingleton(serviceKey);
}
public void RegisterSingleton(object? serviceKey, TService instance) where TService : class
{
_services.AddKeyedSingleton(serviceKey, instance);
}
public void RegisterSingleton(object? serviceKey, Func factory) where TService : class
{
_services.AddKeyedSingleton(serviceKey, factory);
}
public void RegisterScoped() where TService : class where TImplementation : class, TService
{
_services.AddScoped();
}
public void RegisterScoped(Func factory) where TService : class
{
_services.AddScoped(factory);
}
public void RegisterScoped(object? serviceKey) where TService : class where TImplementation : class, TService
{
_services.AddKeyedScoped(serviceKey);
}
public void RegisterScoped(object? serviceKey, Func factory) where TService : class
{
_services.AddKeyedScoped(serviceKey, factory);
}
public void RegisterTransient() where TService : class where TImplementation : class, TService
{
_services.AddTransient();
}
public void RegisterTransient(Func factory) where TService : class
{
_services.AddTransient(factory);
}
public void RegisterTransient(object? serviceKey) where TService : class where TImplementation : class, TService
{
_services.AddKeyedTransient(serviceKey);
}
public void RegisterTransient(object? serviceKey, Func factory) where TService : class
{
_services.AddKeyedTransient(serviceKey, factory);
}
}
}