Я работаю с типом Action<T1>
в своем собственном методе расширения, хотя я хотел бы создать свойство в делегате, а затем передать это свойство делегата другому методу, который также добавит свойства.
Примером этого может быть, если я напишу свои собственные методы расширения для добавления сваггера в IServiceCollection
. Допустим, есть OperationFilter
и DocumentFilter
и множество других стандартных свойств, которые я устанавливаю для SwaggerGenOptions
, поэтому я принял решение создать свой собственный пакет NuGet с расширением IServiceCollection
по умолчаниючтобы сделать все это во всех моих службах.
Мне бы хотелось что-то похожее на следующее (или объединение свойств делегатов тех из них, которые были заданы в этом методе при вызове AddSwaggerGen
):
public static IServiceCollection AddCommonSwaggerGen(this IServiceCollection services, Action<SwaggerGenOptions> options)
{
// Somehow I'd like to do this:
options.OperationFilter<MyOperationFilter>();
options.DocumentFilter<MyDocumentFilter>();
options.OrderActionsBy(a => a.RelativePath);
options.DescribeAllEnumsAsStrings();
// Then I can just pass it in to AddSwaggerGen
services.AddSwaggerGen(options);
return services;
}
Затем в каждом приложении я хотел бы сделать что-то вроде:
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1.0", new OpenApiInfo() { Title = "Micro Service 1 Api v1.0", Version = "v1.0" });
// Also set other option properties customised to each service
});
Каков наилучший способ достижения этого или это просто недостижимо?
Мой следующий вариант должен был пройти в SwaggerGenOptions
и изучить его использование в действии, но тогда мне, вероятно, понадобится что-то вроде Automapper
, чтобы отобразить все свойства, которые будут раздражать.