首页 新闻 搜索 专区 学院

Blazor Sever 使用AspectCore做AOP日志拦截无法获取用户名的问题

0
悬赏园豆:100 [待解决问题]

.Net 6 + AspectCore 2.2.0
Program.cs中使用AspectCore
在拦截器工厂中的IServiceProvider与测试类中的IServiceProvider并不是同一个实例,导致,在AOP中无法获取到本次连接所有的相关信息,请大家不吝赐教

//替换默认的容器
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
services.ConfigureDynamicProxy(config =>
{
    config.Interceptors.Add(new LogAopFactory());
    config.NonAspectPredicates.Add(m => m.CustomAttributes.All(a => a.AttributeType != typeof(LogInfoAttribute)));
});

获取拦截器的工厂

public class LogAopFactory : InterceptorFactory
    {
        public override IInterceptor CreateInstance(IServiceProvider serviceProvider)
        {
            Console.WriteLine($"CustomFactory {serviceProvider.GetType().FullName} {serviceProvider.GetHashCode()} ");
            return serviceProvider.GetService<LogAop>()!;
        }
    }

在组件中注入的测试类

public class StoreTest
    {
        private readonly IServiceProvider serviceProvider;

        public StoreTest(IServiceProvider serviceProvider)
        {
            Console.WriteLine($"provider {serviceProvider.GetType().FullName} {serviceProvider.GetHashCode()}");
            var store = serviceProvider.GetRequiredService<UserStore>();
            this.serviceProvider = serviceProvider;
            Console.WriteLine($"StoreTest {store.GetHashCode()}");
        }
    }
MTiter的主页 MTiter | 初学一级 | 园豆:104
提问于:2022-05-22 10:33
< >
分享
所有回答(2)
0

建议检查一下 CreateInstance(IServiceProvider serviceProvider) 中的 serviceProvider 从何而来

dudu | 园豆:36446 (高人七级) | 2022-05-22 14:12
0

使用SG进行AOP操作了链接

MTiter | 园豆:104 (初学一级) | 2022-05-24 09:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册