我收集了一些服务,这些服务可以通过以下方式解决:
//other scope, such as default per http request in aspnet core
// new scope is created which is not part of web request scope
using (var scope = container.BeginLifetimeScope())
{
var services = scope.Resolve<IEnumerable<MyService>>();
}
但是问题是,作用域在所有Enumerable项之间共享,如何解决它们,以便使每个项都获得新的作用域?
答案 0 :(得分:0)
执行此操作有两个步骤。您需要将依赖项注册为每个生命周期作用域的实例,然后需要创建一个嵌套作用域并使用它来解决依赖项。
public class MyModule : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<MyService1>(ThisAssembly)
.As<MyService>
.InstancePerLifetimeScope();
builder.RegisterType<MyService2>(ThisAssembly)
.As<MyService>
.InstancePerLifetimeScope();
builder.RegisterType<MyService3>(ThisAssembly)
.As<MyService>
.InstancePerLifetimeScope();
}
}
然后,您应该能够正确解析嵌套作用域中的新实例,如下所示:
using (var scope = container.BeginLifetimeScope())
{
var services = scope.Resolve<IEnumerable<MyService>>();
}