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