Задать вопрос
Ответы пользователя по тегу Предметно-ориентированное проектирование
  • AutoMapper. Мапинг из DTO/ViewModel в Domain.Entity

    Eskat0n
    @Eskat0n
    Психопат девелоперский
    Вот способ, который мне приходилось применять в проектах компании ByndyuSoft и который я настоятельно рекомендую для подобных щекотливых ситуаций.

    1. Создаете публичное свойство в ваших профилях, в которых нужно обращаться к БД и которое будет содержать в себе ссылку на абстрактную фабрику TypeResolver'ов.
    2. Регистрируете все Profile в IoC-контейнере на свой тип (практически все мейнстримовые контейнеры это поддерживают, мы используем Castle.Windsor).
    3. Регистрируете вашу абстрактную фабрику.
    4. Создаете все профили, используя резолвинг через IoC и регистрируете их. Для регистрации профилей рекомендую воспользоваться моей библиотекой NArms.Automapper (есть в NuGet), но вы можете сделать это и вручную.
    5. В профиле просто создаете нужный TypeResolver, используя абстрактную фабрику.

    Если используется Castle.Windsor, то можете прибегнуть к менее гибкому, но тоже имеющего право на жизнь решению с использованием NArms.Windsor. Статический класс IoC т.о. можно инициализировать, допустим в одном из Installer'ов (я завожу под это дело специальный WindsorInstaller). В таком случае вы можете резолвить что угодно через IoC.Resolve<>(). Способ не очень красивый, да и вы получаете т.о. лишнюю зависимость в сборках с профилями (от Castle.Windsor).
    Ответ написан
    2 комментария