Вот способ, который мне приходилось применять в проектах компании 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).