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
, Что мне не хватает? Есть идеи?