有没有办法知道控制器是否注册了 IAutofa AuthorizationFilter

Is there way to know whether Controller is registerd with IAutofacAuthorizationFilter

我们正在使用 Autofac 的 IAutofacAuthorizationFilter 构建授权过滤器,我们已经在我们的基本控制器启动时注册了这个过滤器。所有控制器都继承自我们的基本控制器。我们在执行过程中需要确定目标控制器是否已向 CustomAuthFilter 注册。我尝试使用反射来检查控制器是否已注册 CustomAuthFilter,但我无法获取。他们是否有更好的方法来检查控制器是否已在 CustomAuthFilter 中注册。

 builder.RegisterType<CustomAuthFilter>()
            .Named<IAutofacAuthorizationFilter>("CustomAuthFilter")
            .WithParameters(new[]
                {
                    new ResolvedParameter((pi, ctx) => pi.ParameterType == typeof(Logger),
                        (pi, ctx) => ctx.Resolve<Logger>()),
                    new ResolvedParameter((pi, ctx) => pi.ParameterType == typeof(Reader),
                        (pi, ctx) => ctx.Resolve<Reader>())
                }
               ).AsWebApiAuthorizationFilterFor<ControllerBaseAPI>()
            .InstancePerRequest();

此方法使用 RegisterBuildCallback 事件来过滤注册。它还使用反射,因为元数据类型在编译时不存在或者我无法找到。您可能会花一些时间来细化选择,但这是容器中存储信息的地方。

 builder.RegisterBuildCallback(builtContainer =>
 {
            //Contains all controller registered with AutofacWebApiAuthorizationFilter
            var registeredWithFilter = builtContainer.ComponentRegistry.Registrations.SelectMany(x => x.Metadata).Where(x => x.Key.Equals("AutofacWebApiAuthorizationFilter"))
                                                                        .Select(x => x.Value).Select(x => x.GetType().GetProperty("ControllerType").GetValue(x))
                                                                        .Select(x => x.GetType().GetProperty("Name").GetValue(x));

 });