拦截器会被多次调用构造函数么?
govanyjj opened this issue · 1 comments
govanyjj commented
问题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
之前:之后:
govanyjj commented
问题解决了,似乎是因为,在StartUp中,定义了多次注册导致的。
跟网上找到的其他教程不同的是,似乎只保留 services.AddTransient即可正常拦截,无需下面的注册。
将下面代码注释后,就可以正常调用了。
services.ConfigureDynamicProxy(config =>
{
config.Interceptors.AddServiced<AuthProxyAttribute>();
});