0

UnityContainerに特別なキーを持つインスタンスのコピーを1つだけシステムに保持させたいと思います。また、そのキーを他のインスタンスでオーバーライド/更新する機能も必要です。次のコードは私の最初の考えを示しています。

 var UnityContainer = new UnityContainer();
 for (int i = 0; i < 100; i++)
 {
     Person p = new Person();
     UnityContainer.RegisterInstance<Person>("Person", p);
 }

ただし、上記のコードにはメモリリークの問題があります。Personインスタンスの100個のコピーがUnityContainerによって参照され、リサイクルできませんでした。私が欲しいのは、Personの最新のインスタンスのみをメモリに保持することです。次のコードに変更しても問題は解決しませんでした。これは、Personのすべてのインスタンスが弱参照を使用してUnityContainerに保持されるようになったためです。つまり、他に参照を保持する場所がない場合、Personのすべてのインスタンスをリサイクルできます。

UnityContainer.RegisterInstance<Person>("Person", p, new ExternallyControlledLifetimeManager());

面白いことに、UnityContainer.IsRegistered( "Person")を呼び出すと、「True」が返されます。ただし、UnityContainer.Resolve( "Person")を呼び出すと、システムは例外をスローします。そのため、UnityContainer.IsRegisteredメソッドを使用して、使用可能なインスタンスがそこに存在するかどうかを判断できませんでした。

4

0 に答える 0