我有许多从基类Repository继承的存储库。目前我正在使用像这样的结构映射注册内存实现(并且它工作得很好):
ForRequestedType<Repository<Timeslot>>()
.TheDefaultIsConcreteType<InMemoryRepository<Timeslot>>()
.AsSingletons();
ForRequestedType<Repository<Appointment>>()
.TheDefaultIsConcreteType<InMemoryRepository<Appointment>>()
.AsSingletons();
我认为使用StructureMap对Open Generics的支持来注册所有这些(数量正在增长)会很好,所以当我添加一个新的Repository时,我不必更新ServiceRegistry。
我试过了:
ForRequestedType(typeof (Repository<>))
.CacheBy(InstanceScope.Singleton)
.TheDefaultIsConcreteType(typeof (InMemoryRepository<>));
这似乎不起作用。它不会抛出异常,但它的行为就像存储库不是单例。添加到它们中的任何内容都不会在应用程序的生命周期中持续存在。
是否可以注册一个开放的泛型,并且具有由单例范围缓存的实现?这是一个ASP.NET MVC应用程序,我只想让存储库工作,直到重新启动应用程序。
答案 0 :(得分:0)
我有一个类似的场景,并且能够使用更新的流畅语法(使用StructureMap 2.6.3.0)成功解决它:
x.For(typeof(Repository<>))
.LifecycleIs(InstanceScope.Singleton)
.Use(typeof(InMemoryRepository<>));