Я использую шаблон декоратора для реализации кэширования для моих репозиториев следующим образом:
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
.Что мне не хватает?Есть идеи?