Ошибка на уровне задач Sharp Architecture: обработчик команды не найден для типа команды

В настоящее время я использую Sharp Architecture 2.0 и неплохо справляюсь с этим. Но у меня возникла проблема с выполнением команд на уровне задач. У меня есть следующие классы, связанные с моей командой:

SaveOptionStep1Command, который реализует CommandBase и SaveOptionStep1CommandHandler, который реализует
ICommandHandler‹ SaveOptionStep1Command > и
SaveOptionStep1CommandResult, который реализует CommandResult< /эм>

Когда я создаю команду, я получаю следующую ошибку и не могу определить, откуда возникла проблема.

ОШИБКА
Обработчик команды не найден для типа команды: EasyOptions.Tasks.Commands.SaveOptionStep1Command

Описание: во время выполнения текущего веб-запроса возникло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: SharpArch.Domain.Commands.CommandHandlerNotFoundException: обработчик команды не найден для типа команды: EasyOptions.Tasks.Commands.SaveOptionStep1Command

Вот Githubu Gist моего кода: https://gist.github.com/1314136


person Reaction21    schedule 25.10.2011    source источник


Ответы (2)


Я обнаружил, что неправильно создавал репозитории. Я создавал свои репозитории с помощью моего класса ClientRepository вместо доступа к нему с помощью интерфейса IRepositoryWithTypedId. Как только я изменил, что мои репозитории и обработчики были правильно добавлены в мой контейнер Windsor без каких-либо проблем с зависимостями. Теперь он работает так, как мне нужно.

person Reaction21    schedule 26.10.2011

У меня была такая же проблема с SharpArch 2.0.4. Потратив пару часов на игру с ComponentsRegistars.cs для регистрации компонентов Castle, я понял, что мне нужно изменить метод AddTasksTo. Моя точка зрения заключается в том, что, поскольку команды в основном размещаются в инфраструктуре, они заменяют старую версию:

     container.Register(
        AllTypes
            .FromAssemblyNamed("v2.Tasks")
            .Pick().If(t => t.Name.EndsWith("Tasks"))
            .WithService.FirstNonGenericCoreInterface("v2.Domain"));

с этим :

 container.Register(
    AllTypes
        .FromAssemblyNamed("v2.Tasks")
        .Pick()
        .WithService.FirstNonGenericCoreInterface("v2.Domain"));

который в конечном итоге выберет каждый элемент, я думаю.

Итак, используя первую версию, проблема решена.

Спасибо

person Johnis Agorgianitis    schedule 27.05.2013