dotnetcore/AspectCore-Framework

发现了一个不知道是不是bug的问题,求大佬解答一下!

odinsam opened this issue · 1 comments

如果我如下使用 特性头的拦截就会无效

public void ConfigureServices(IServiceCollection services)
{
    services.SetServiceProvider();
    services.AddSingleton<FoobarInterceptorAttribute>().ConfigureDynamicProxy();
    services.AddSingleton<Iservice, service>();
    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "demo1", Version = "v1" });
    });
    services.SetServiceProvider();
}
public static class OdinInjectHelper
{
    public static IServiceProvider serviceProvider { get; set; }

    public static T GetService<T>() where T : class
    {
        return serviceProvider.GetRequiredService<T>();
    }

    public static T GetService<T>(this IServiceCollection services) where T : class
    {
        ServiceProvider serviceProvider = services.BuildServiceProvider();
        return serviceProvider.GetRequiredService<T>();
    }

    public static void SetServiceProvider(this IServiceCollection services)
    {
        serviceProvider = services.BuildServiceProvider();
    }
}
[HttpGet]
public IActionResult Get()
{
    this.service = OdinInjectHelper.GetService<Iservice>();
    //下边注释的方法执行 是可以的
    // this.service = this.HttpContext.RequestServices.GetService<Iservice>();
    service.show();
    return Ok();
}

求解答是为什么啊,拜托了!

问题出在这里

ServiceProvider serviceProvider = services.BuildServiceProvider();

调用原生的BuildServiceProvider不会构建动态代理类型