Autofac:批量注册开放generics类型

我得到了一个具有许多实现IHandler具体类型的程序集,如下所示:

 public class MoveCustomerHandler : IHandler { void IHandler.Handle(MoveCustomerCommand c) { // some business logic for moving a customer. } } 

目前,我正按照以下方式逐一注册:

 builder.RegisterType() .As<IHandler>(); builder.RegisterType() .As<IHandler>(); builder.RegisterType() .As<IHandler>(); // Many handler registrations here... 

使用构造函数注入注入命令处理程序,如下所示:

 public class OrderController { private readonly IHandler handler; public OrderController(IHandler handler) { this.handler = handler; } } 

有没有办法使用Autofac以简单的方式批量注册我的所有处理程序?

与Jim的答案类似,但利用AsClosedTypesOf

 Assembly[] assemblies = GetYourAssemblies(); builder.RegisterAssemblyTypes(assemblies) .AsClosedTypesOf(typeof(IHandler<>)); 

你可能想要这样的东西,虽然我不确定IsAssignable()如何用开放generics来表现。

 Assembly[] assemblies = GetYourAssemblies(); builder.RegisterAssemblyTypes(assemblies) .Where(t => t.IsAssignableFrom(typeof(IHandler<>))) .AsSelf() .AsImplementedInterfaces();