在方法之间共享委托属性

问题描述 投票:1回答:1

我正在自己的扩展方法中使用类型Action<T1>,尽管我想在委托中建立一个属性,然后将该委托属性传递给另一个也会添加属性的方法。

一个例子是,如果我要编写自己的扩展方法以向IServiceCollection添加大张旗鼓。假设有一个OperationFilter和一个DocumentFilter以及我在SwaggerGenOptions上设置的许多其他标准属性,所以我决定创建一个带有默认IServiceCollection扩展名的自己的NuGet程序包在我所有的服务中完成所有这一切。

我想要类似于以下内容(或将过去和在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
1个回答
2
投票

给我的印象是您正在尝试做这样的事情

© www.soinside.com 2019 - 2024. All rights reserved.