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