SimpleInjector を Inversion of Control コンテナーとして使用する LinqToLdap GIT サンプル プロジェクトをダウンロードし、そのコードを Castle Windsor に翻訳しました。私の設定コードは次のようになります。
container.Register(Component.For<ILdapConfiguration>()
.UsingFactoryMethod(() =>
{
var config = new LdapConfiguration()
.AddMapping(new UserImageMapping())
.AddMapping(new UserMapping());
config.ConfigurePooledFactory("my.ad.server");
return config;
}));
ディレクトリ コンテキストは次のように登録されます。
container.Register(Component.For<IDirectoryContext>()
.UsingFactoryMethod(() => new DirectoryContext(container.Resolve<ILdapConfiguration>())).LifestyleSingleton());
私が遭遇したこの問題は、次のようなクエリで DirectoryContext を使用する場合です。
var photo = context.Query<UserPhoto>().FirstOrDefault(u => u.EmployeeId == userQuery.Id);
コンテキスト オブジェクトには、それに関連付けられたプロバイダーのリストがあり、これらのプロバイダーの数は、クエリが実行されるたびに増加し続けます。数分間の使用で数百になるほどです。コンテキストの正しい破棄と関係があると思いますが、コンテキストを明示的に破棄すると、コンテキストが破棄され、何らかの理由で新しいコンテキストが作成されないため、後続のクエリは失敗します。誰でも助けることができますか?