У меня есть несколько репозиториев, которые наследуются от репозитория базового класса. В настоящее время я регистрирую реализации в памяти с помощью Структурной карты следующим образом (и она прекрасно работает):
ForRequestedType<Repository<Timeslot>>()
.TheDefaultIsConcreteType<InMemoryRepository<Timeslot>>()
.AsSingletons();
ForRequestedType<Repository<Appointment>>()
.TheDefaultIsConcreteType<InMemoryRepository<Appointment>>()
.AsSingletons();
Я подумал, что было бы неплохо использовать поддержку StructureMap для Open Generics для регистрации всего этого (число растет), поэтому при добавлении нового репозитория мне не нужно будет обновлять ServiceRegistry.
Я пробовал это:
ForRequestedType(typeof (Repository<>))
.CacheBy(InstanceScope.Singleton)
.TheDefaultIsConcreteType(typeof (InMemoryRepository<>));
Кажется, это не работает. Это не исключение, но действует так, как будто репозитории не являются синглетонами. Все, что добавлено к ним, не сохраняется в течение жизненного цикла приложения.
Можно ли зарегистрировать открытый универсальный объект и кэшировать реализации с помощью одноэлементной области видимости? Это приложение ASP.NET MVC, и я просто хочу, чтобы хранилища работали до тех пор, пока приложение не будет перезапущено.