2009-08-27 2 views
2

У меня есть несколько репозиториев, которые наследуются от базового класса Repository. В настоящее время я регистрации внедрений в памяти со структурой карты, как это (и это работает прекрасно):StructureMap Open Generics и CacheBy Singleton

ForRequestedType<Repository<Timeslot>>() 
    .TheDefaultIsConcreteType<InMemoryRepository<Timeslot>>() 
    .AsSingletons(); 

ForRequestedType<Repository<Appointment>>() 
    .TheDefaultIsConcreteType<InMemoryRepository<Appointment>>() 
    .AsSingletons(); 

Я думал, что неплохо было бы использовать поддержку StructureMap в для Open Дженерики зарегистрировать все эти (их число растет), поэтому, когда я добавляю новый репозиторий, мне не нужно будет обновлять ServiceRegistry.

Я попытался это:

ForRequestedType(typeof (Repository<>)) 
    .CacheBy(InstanceScope.Singleton) 
    .TheDefaultIsConcreteType(typeof (InMemoryRepository<>)); 

не кажется, что работает. Он не генерирует исключение, но он действует так, как репозитории не являются одиночными. Все, что им добавлено, не сохраняется во время жизненного цикла приложения.

Возможно ли зарегистрировать открытый общий файл и реализовать кэширование с помощью одноэлементной области? Это приложение ASP.NET MVC, и я просто хочу, чтобы репозитории работали до перезапуска приложения.

+0

Lance вы Выяснить решение этой проблемы? – ahsteele

+0

Нет, просто продолжал добавлять в конфигурацию. –

ответ

0

У меня был подобный сценарий и был в состоянии решить ее успешно используют более новый синтаксис свободно (с использованием StructureMap 2.6.3.0):

x.For(typeof(Repository<>)) 
.LifecycleIs(InstanceScope.Singleton) 
.Use(typeof(InMemoryRepository<>)); 
Смежные вопросы