StructureMap RegistrationConvention для шаблона декоратора

Я использую шаблон декоратора для реализации кэширования для моих репозиториев как таковых:

IFooRepository()
IFooRepository FooRepository()
IFooRepository CachedFooRepository(IFooRepository fooRepository)

Репозиторий Cached проверяет кеш на наличие запрошенного объекта и, если он не существует, вызывает FooRepository для его извлечения и сохранения. В настоящее время я регистрирую эти типы в StructureMap, используя следующий метод:

For<IFooRepository>().Use<CachedFooRepository()
    .Ctor<IFooRepository>().Use<FooRepository>();

Это прекрасно работает, но с ростом числа кэшируемых репозиториев регистрация каждого из них становится громоздкой и подвержена ошибкам. Поскольку у меня есть общее соглашение, я пытаюсь просканировать свою сборку с помощью пользовательского IRegistrationConvention, но я не могу понять, как передать FooRepository в конструктор CachedFooRepository в void Process(Type type, Registry registry) функция.

Я нашел примеры, чтобы сделать что-то вроде:

Type interfaceType = type.GetInterface(type.Name.Replace("Cached", "I"));
registry.AddType(interfaceType, type);

или же

Type interfaceType = type.GetInterface(type.Name.Replace("Cached", "I"));
registry.For(interfaceType).Use(type);

Но ни один метод не позволит мне связать .Ctor, Что мне не хватает? Есть идеи?

0 ответов