Простой инжектор, открытый универсальный декоратор

Я пытаюсь использовать некоторые из приятных возможностей простого инжектора.

В настоящее время у меня проблемы с декораторами, они не получают удар, когда я их тоже ожидаю.

Я регистрирую их так:

container.RegisterManyForOpenGeneric(
      typeof(ICommandHandler),
      AppDomain.CurrentDomain.GetAssemblies());

container.RegisterDecorator(
      typeof(ICommandHandler),
      typeof(CreateValidFriendlyUrlCommandHandler),
      context => context.ServiceType == typeof(ICommandHandler)
 );

 container.RegisterDecorator(
      typeof(ICommandHandler),
      typeof(CreateProductValidationCommandHandler),
      context => context.ServiceType == typeof(ICommandHandler)
 );

Я думаю, что я что-то упускаю, так как я ожидаю, что вызовICommandHandler вызоветCreateValidFriendlyUrlCommandHandler а такжеCreateProductValidationCommandHandler перед запуском сам.

Я пробовал другую регистрацию, как это:

container.RegisterManyForOpenGeneric(
      typeof(ICommandHandler),
      AppDomain.CurrentDomain.GetAssemblies());

container.RegisterDecorator(
      typeof(ICommandHandler),
      typeof(CreateValidFriendlyUrlCommandHandler),
      context => context.ImplementationType == typeof(CreateProductCommandHandler)
 );

 container.RegisterDecorator(
      typeof(ICommandHandler),
      typeof(CreateProductValidationCommandHandler),
      context => context.ImplementationType == typeof(CreateProductCommandHandler)
 );

Как я и думал, регистрация декоратора дляICommandHandler по типуICommandHandler когдаCreateProductValidationCommandHandler а такжеCreateValidFriendlyUrlCommandHandler воплощать в жизньICommandHandler может ударить немного круговой ссылки.

Но изменение не имело значения.

Вот мой:CreateProductValidationCommandHandler

public class CreateProductValidationCommandHandler 
    : ICommandHandler
{
    private readonly ICommandHandler decorated;
    private readonly IValidationService validationService;

    public CreateProductValidationCommandHandler(
        ICommandHandler decorated,
        IValidationService validationService)
    {
        this.decorated = decorated;
        this.validationService = validationService;
    }

    public void Handle(CreateProductCommand command)
    {
        if (!validationService.IsValidFriendlyName(
            command.Product.ProductFriendlyUrl))
        {
            command.ModelStateDictionary.AddModelError(
                "ProductFriendlyUrl", 
                "The Friendly Product Name is not valid...");

            return;
        }

        if (!validationService.IsUniqueFriendlyName(
            command.Product.ProductFriendlyUrl))
        {
            command.ModelStateDictionary.AddModelError(
                "ProductFriendlyUrl", 
                "The Friendly Product Name is ...");

            return;
        }
    }
}

И это моеCreateValidFriendlyUrlCommandHandler

public class CreateValidFriendlyUrlCommandHandler
    : ICommandHandler
{
    private readonly ICommandHandler decorated;

    public CreateValidFriendlyUrlCommandHandler(ICommandHandler decorated)
    {
        this.decorated = decorated;
    }

    public void Handle(CreateProductCommand command)
    {
        if (string.IsNullOrWhiteSpace(
            command.Product.ProductFriendlyUrl))
        {
            command.Product.ProductFriendlyUrl = 
                MakeFriendlyUrl(command.Product.Name);
        }
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос