2009-08-27 16 views
2

私は、ベースクラスリポジトリから継承する多くのリポジトリを持っています。現在、私はこのような構造のマップで、メモリの実装を登録しています(そして、それは偉大な作業です):StructureMapオープンジェネリックスとCacheByシングルトン

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

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

私はすべてのこれらの(番号がある登録するオープンジェネリックのためのStructureMapのサポートを使用していいだろうと思いました私が新しいリポジトリを追加したときにServiceRegistryを更新する必要はありませんでした。

私はこれを試してみました:動作していないようです

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

。例外をスローしませんが、リポジトリはシングルトンではないように動作します。アプリケーションに追加されたものは、アプリケーションのライフサイクル中は維持されません。

オープンジェネリックを登録して、実装をシングルトンスコープでキャッシュすることはできますか?これはASP.NET MVCアプリケーションです。アプリケーションを再起動するまでリポジトリを機能させたいだけです。

+0

ランスは、あなたがこの問題の解決策を見つけ出すのですか? – ahsteele

+0

いいえ、ちょうど構成に追加し続けました。 –

答えて

0

私は、同様のシナリオを持っていたし、成功した(のStructureMap 2.6.3.0を使用して)新しい流暢な構文を使用して、それに対処することができました:

x.For(typeof(Repository<>)) 
.LifecycleIs(InstanceScope.Singleton) 
.Use(typeof(InMemoryRepository<>)); 
関連する問題