using Luna.Configuration; using Luna.Providers.Abstractions; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace Luna.Providers.Extensions; public static class ServiceProviderExtensions { extension(IServiceProvider provider) { public TProvider GetProvider(string? name = null) where TProvider : IProvider { name ??= TProvider.Name; return provider.GetRequiredKeyedService(name); } public ProviderOptions GetProviderOptions(string? name = null) where TProvider : IProvider { name ??= TProvider.Name; return provider .GetRequiredService>() .Get(name); } } }