发现了一个不知道是不是bug的问题,求大佬解答一下!
odinsam opened this issue · 1 comments
odinsam commented
如果我如下使用 特性头的拦截就会无效
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();
}
求解答是为什么啊,拜托了!
liuhaoyang commented
问题出在这里
ServiceProvider serviceProvider = services.BuildServiceProvider();
调用原生的BuildServiceProvider不会构建动态代理类型