【发布时间】:2017-07-24 15:33:37
【问题描述】:
我有一个 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 相同,但我不想通过我的所有类传递引用。
有没有其他方法可以解决每个请求一次的动态依赖关系?
【问题讨论】:
标签: c# asp.net-core autofac