C# 全局筛选正确的注册方式

C# 全局筛选正确的注册方式,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我有一个异步操作过滤器(IAsyncationFilter)。我希望它能在全球范围内,以各种方式发挥作用。我可以在网上注册 services.AddMvc(options => { options.Filters.Add(typeof(RequestFilter)); }); 在创业班 我想登记一下 services.RegisterRequestFilter(); 我可以用一个扩展方法,比如 public static void RegisterRequestFi

我有一个异步操作过滤器(IAsyncationFilter)。我希望它能在全球范围内,以各种方式发挥作用。我可以在网上注册

services.AddMvc(options =>
{
     options.Filters.Add(typeof(RequestFilter));
});
在创业班

我想登记一下

services.RegisterRequestFilter(); 
我可以用一个扩展方法,比如

    public static void RegisterRequestFilter(this IServiceCollection services)
    {
        services.AddMvc(options =>
        {
            options.Filters.Add(typeof(RequestFilter));
        });
    }
然后在启动时使用它,但我不知道它是否正确,因为将出现两次
服务。AddMvc
:一次不带任何参数,另一次带options参数


这是正确的方法还是有更好的解决方案?

有多个
AddMvc()
调用不会有问题。服务,
AddMvc
以一种不会被多次注册的方式注册,即使是这样,通常也不是问题

当然,您可以简单地将扩展方法命名为
AddMvcWithRequestFilter
,只调用该方法,而不单独调用
AddMvc()。那样的话,你只会叫它一次。但同样,这不会有太大的区别

如果确实不想从扩展方法中调用
AddMvc()
,也可以直接配置
mvcopions
,如下所示:

public static void RegisterRequestFilter(this IServiceCollection services)
{
    services.Configure<MvcOptions>(options =>
    {
        options.Filters.Add(typeof(RequestFilter));
    });
}
然后,您可以在
启动中这样调用它:

services.AddMvc()
    .AddRequestFilter();

这可能是这里最“干净”的方法。

有多个
AddMvc()
调用不会有问题。服务,
AddMvc
以一种不会被多次注册的方式注册,即使是这样,通常也不是问题

当然,您可以简单地将扩展方法命名为
AddMvcWithRequestFilter
,只调用该方法,而不单独调用
AddMvc()。那样的话,你只会叫它一次。但同样,这不会有太大的区别

如果确实不想从扩展方法中调用
AddMvc()
,也可以直接配置
mvcopions
,如下所示:

public static void RegisterRequestFilter(this IServiceCollection services)
{
    services.Configure<MvcOptions>(options =>
    {
        options.Filters.Add(typeof(RequestFilter));
    });
}
然后,您可以在
启动中这样调用它:

services.AddMvc()
    .AddRequestFilter();

这可能是这里最“干净”的方法。

如果你添加扩展方法,你不再需要其他调用。我认为这是最好的方法,至少我不能想出更好的方法如果你添加扩展方法,你不再需要其他调用。我认为这是最好的方法,至少我想不出更好的