Autofac 和通用命令模式

Autofac and generic command pattern

我正在尝试装饰我的命令处理程序,我正在尝试在我的处理器中解析它们。

我这样注册了我的命令:

builder.RegisterAssemblyTypes(typeof(ICommandProcessor).Assembly)
    .AsClosedTypesOf(typeof(ICommandHandler<,>))
    .AsSelf().AsImplementedInterfaces().Named("implementor", typeof(ICommandHandler<,>));

builder.RegisterGenericDecorator(
    typeof(CatchValidationErrorsDecorator<,>),
    typeof(ICommandHandler<,>), fromKey: "implementor")
    .AsImplementedInterfaces();

问题是当我不使用命名扩展时,通用装饰器不工作。 当我使用命名扩展时,我无法像这样解析我的组件:

var handerType = typeof (ICommandHandler<,>)
    .MakeGenericType(command.GetType(), typeof (TResult));
dynamic handler = _container.Resolve(handerType);

有人知道如何解决这个问题吗?

过去这让我很头疼。最终为我完成的注册是:

var assembly = typeof(ICommandProcessor).Assembly);

builder.RegisterAssemblyTypes(assembly).As(type =>
    from interfaceType in type.GetInterfaces()
    where interfaceType.IsClosedTypeOf(typeof(ICommandHandler<,>))
    select new KeyedService("implementor", interfaceType));

builder.RegisterGenericDecorator(
    typeof(CatchValidationErrorsDecorator<,>), 
    typeof(ICommandHandler<,>),
    fromKey: "implementor");