0

我想让系统在 UnityContainer 中保留一份且只有一份带有特殊键的实例副本。而且我还希望能够使用其他实例覆盖/更新该密钥。以下代码显示了我的第一个想法:

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

但是,上面的代码存在内存泄漏问题。UnityContainer 会引用 100 个 Person 实例,无法回收。我想要的只是将最新的 Person 实例保留在内存中。将其更改为以下代码无法解决问题。因为,现在所有的 Person 实例都通过弱引用保存在 UnityContainer 中,这意味着如果没有其他地方保持引用,所有 Person 实例都可以被回收。

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

有趣的是,当我调用 UnityContainer.IsRegistered("Person") 时它返回 'True'。但是,如果我调用 UnityContainer.Resolve("Person"),系统会抛出异常。所以我不能使用 UnityContainer.IsRegistered 方法来决定是否存在可用的实例。

4

0 回答 0