dotnetcore/AspectCore-Framework

拦截器会被多次调用构造函数么?

govanyjj opened this issue · 1 comments

问题1:构造函数被多次调用
我在尝试使用构造参数传递一些特定参数的时候,发现获取到的值,是会被以外改变的。
但是我并没有在其他地方有任何的调用啊?
这是什么情况导致的呢?
另外,这种多次改变,也导致,我在Invoke中没有办法获取到正确的值。

StartUp.cs中配置如下

    services.AddTransient<AuthProxyAttribute>();
            // AspectCore 根据属性注入配置全局 AOP 过滤器
            services.ConfigureDynamicProxy(config =>
            {
                config.Interceptors.AddServiced<AuthProxyAttribute>();
                //  config.Interceptors.AddTyped<AuthProxyAttribute>();//AuthProxyAttribute这个是需要全局拦截的拦截器
            });

拦截器实现

    public class AuthProxyAttribute : AbstractInterceptorAttribute
    {
        private string _RuleCode = "";

        public string RuleCode
        {
            get => _RuleCode;
            set
            {
                Console.WriteLine("之前:" + _RuleCode + "之后:" + value);
                _RuleCode = value;
            }
        }

        public AuthProxyAttribute(string ruleCode = "")
        {
            RuleCode = ruleCode;
        }
 }
// 调用方式为采用Attribute方式

 [AuthProxy("1000a")]
 GeneralResult RegisterPermission(PermissionRequest param);

结果输出

之前:之后:
之前:之后:1000a
之前:之后:

整体情况如下图所示
WX20210125-012936@2x
WX20210125-012950@2x

问题解决了,似乎是因为,在StartUp中,定义了多次注册导致的。
跟网上找到的其他教程不同的是,似乎只保留 services.AddTransient即可正常拦截,无需下面的注册。
将下面代码注释后,就可以正常调用了。

           services.ConfigureDynamicProxy(config =>
            {
                config.Interceptors.AddServiced<AuthProxyAttribute>();
            });