Насколько я понимаю вопрос, вы в основном рассматриваете возможность добавления атрибутов, чтобы упростить регистрацию контейнеров. Вы по-прежнему внедряете кэши, используя шаблон проектирования Decorator, который, IMO, является правильным способом реализации кэширования.
Мы делаем то же самое в Safewhere, но вместо этого используем регистрацию на основе конвенции. Мы также используем Castle Windsor, поэтому я не знаю, возможно ли это с StructureMap, но мы просто сканируем соответствующие сборки по имени Caching*Repository
и регистрируем их как декораторы для реальных хранилищ. У нас также есть основанный на соглашении модульный тест, который проверяет наличие всех необходимых кэширующих репозиториев.
Является ли добавление пользовательского атрибута запахом кода или нет, зависит от степени повторного использования вашего кода. Мое эмпирическое правило таково, что я хочу быть способным , чтобы связать все с DI для бедняков. Вместо этого я все еще использую DI-контейнер, но это правило предоставляет мне проверку работоспособности.
В целом, мне не нравится связывать мой код с конкретным контейнером, но я не могу понять, делаете ли вы это здесь. Это зависит от того, нужно ли вам ссылаться на StructureMap для определения пользовательского атрибута. Если бы вы ссылались на Карту структуры, я бы посчитал это запахом.