AutoFac RegisterGenericDecorator не работи с декоратор с ограничение на типа

Имам общ манипулатор на команди с много конкретни реализации.

public interface ICommandHandler<TCommand>

Имам декоратор с ограничение на типа, който искам да използвам за множество, но не всички, реализации на ICommandHandler

    public class AddNoteCommandHandlerDecorator<TCommand> 
    : ICommandHandler<TCommand> where TCommand : INoteCommand
{
    private readonly ICommandHandler<TCommand> decorated;

    public AddNoteCommandHandlerDecorator(ICommandHandler<TCommand> decorated)
    {
        this.decorated = decorated;
    }

    public void Handle(TCommand command)
    ...

Опитвам се да се регистрирам в AutoFac, както следва:

        public static void Register(HttpConfiguration config)
    {
        var builder = new ContainerBuilder();

        builder.RegisterControllers(typeof(MvcApplication).Assembly);

        var assemblies = AppDomain.CurrentDomain.GetAssemblies();
        builder.RegisterAssemblyTypes(assemblies)
            .As(t => t.GetInterfaces()
            .Where(a => a.IsClosedTypeOf(typeof(ICommandHandler<>)))
            .Select(a => new KeyedService("commandHandler", a)));

        builder.RegisterGenericDecorator(
             typeof(AddNoteCommandHandlerDecorator<>),
             typeof(ICommandHandler<>),
             fromKey: "commandHandler");

        var container = builder.Build();

        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

        config.DependencyResolver = new AutoFacContainer(new AutofacDependencyResolver(container));
    }

Въпреки това, когато се извика конкретен манипулатор на команда на команда, която изпълнява INoteCommand, декораторът не функционира.

Грешно ли съм конфигурирал регистрацията в AutoFac? Или пропуснах нещо друго?


person greg    schedule 25.02.2015    source източник
comment
Нищо не сте объркали. Autofac не поддържа това предварително.   -  person Steven    schedule 26.02.2015
comment
Благодаря, Стивън. Гледайки някои от вашите публикации, SimpleInjector има ли тази възможност? ако не, можете ли да предложите по-добър подход?   -  person greg    schedule 27.02.2015
comment
Да, Simple Injector прави това веднага. Няма нищо специално, което трябва да направите. Просто регистрирайте декоратора; ще се приложи условно автоматично.   -  person Steven    schedule 27.02.2015
comment
Страхотна новина! Ще премина към SimpleInjector.   -  person greg    schedule 02.03.2015
comment
това би било полезно за вас weblogs.asp.net/ shijuvarghese/   -  person Ehsan    schedule 24.06.2015