繁体   English   中英

如何在ASP.NET Core中动态解决InstancePerLifetimeScope依赖关系?

[英]How to dynamically resolve InstancePerLifetimeScope dependency in ASP.NET Core?

我有一个ASP.NET Core项目。 我想动态解析其他依赖项中的“每个请求一个实例”依赖项。

我已经在我的Startup类中使用Autofac作为InstancePerLifetimeScope依赖项注册了一个依赖项:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    var builder = new ContainerBuilder();
    builder.RegisterType<MyDependency>().AsImplementedInterfaces().InstancePerLifetimeScope();
    return new AutofacServiceProvider(builder.Build());
}

当我直接在控制器的构造函数中使用此依赖项时,它会按预期工作-它是每个请求的新实例。

public MyController(IMyDependency dependency)
{
}

我想在其中一个依赖类中实现相同的目的。 依赖关系是动态的,因此我想从IServiceProvider解决此问题:

public class MyDeepDeepDependency
{
    public MyDeepDeepDependency(IServiceProvider serviceProvider)
    {
        var dep = serviceProvider.GetService(typeof(IMyDependency));
    }
}

但是,所有请求中的“ dep”实例均相同。
我假定每个请求都有一个新的作用域,并且控制器是从一个新的作用域解析的。 解决IServiceProvider时,我总是得到一个根IServiceProvider而不是一个请求。

有没有一种方法可以解决针对请求的IServiceProvider? 我认为它与控制器中的HttpContext.RequestServices相同,但是我不想将引用向下传递给所有类。

还有其他方法可以解决每个请求一次的动态依赖关系吗?

我最终注入了IHttpContextAccessor:

public class MyDeepDeepDependency
{
    public MyDeepDeepDependency(IHttpContextAccessor contextAccessor)
    {
        var dep = contextAccessor.HttpContext.RequestServices.GetService(typeof(IMyDependency));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM