Мне действительно нравится шаблон, в котором я могу настроить сервис через класс параметров без необходимости его создания, но я не могу найти пример того, как написать метод расширения, который позволяет мне использовать тот же шаблон, такой какниже показано, что существует для регистрации DbContext.
services.AddDbContext<MyDbContext>(options => options.EnableDetailedErrors());
Я вижу, что сигнатура метода использует метод действия, но я не могу найти класс расширения в GitHub для ASP.NET Core, который показывает мнекак написать метод расширения с использованием этого типа шаблона компоновщика опций.
Например, возьмите следующий сервисный код.Как бы я написал метод расширения, чтобы я мог настроить параметры во время регистрации службы.
public void ConfigureServices(IServiceCollection services)
{
services.AddMyService(options => options.SomeSetting = true);
}
public interface IMyService
{
void DoSomething();
}
public class MyService : IMyService
{
private readonly MyServiceOptions _options;
public MyService(IOptions<MyServiceOptions> options)
{
_options = options.Value;
}
public void DoSomething()
{
Console.WriteLine(_options.SomeSetting);
}
}
public static class MyServiceExtensions
{
// How would I write this extension method so that I could configure it with options overload
public static IServiceCollection AddMyService(this IServiceCollection services, Action<MyServiceOptions> configure)
{
services.AddSingleton<IMyService, MyService>();
return services;
}
}