StructureMap RegistrationConvention для шаблона декоратора - PullRequest
3 голосов
/ 25 октября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...