【发布时间】:2019-10-10 11:53:28
【问题描述】:
我在自己的扩展方法中使用 Action<T1> 类型,尽管我想在委托中构建一个属性,然后将该委托属性传递给另一个也将添加属性的方法。
如果我要编写自己的扩展方法来将 swagger 添加到 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 并在Action 中使用它进行调查,但我可能需要Automapper 之类的东西来映射所有令人讨厌的属性。
【问题讨论】:
标签: c# .net .net-core swagger extension-methods