StructureMap Open Generics和CacheBy Singleton

时间:2009-08-27 17:14:15

标签: generics singleton repository structuremap

我有许多从基类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应用程序,我只想让存储库工作,直到重新启动应用程序。

1 个答案:

答案 0 :(得分:0)

我有一个类似的场景,并且能够使用更新的流畅语法(使用StructureMap 2.6.3.0)成功解决它:

x.For(typeof(Repository<>))
 .LifecycleIs(InstanceScope.Singleton)
 .Use(typeof(InMemoryRepository<>));