解析 IEnumerable <Service>时独立于 Autofac 的作用域



我有一组服务,解析方式如下:

//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>>();
}

但是,问题是,范围在所有可枚举项之间共享,如何解决它们以便每个项目都获得新的范围?

有两个部分可以做到这一点。您需要将依赖项注册为每个生存期范围的实例,然后需要创建一个嵌套范围并使用它解析依赖项。

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>>();
}

最新更新