Поскольку IDisposable
и WeakReference
имеют взаимоисключающую семантику, вам нужно выбрать одну. Объединять их опасно, так как после удаления объект, скорее всего, будет иметь несовместимое состояние, которое не подходит для повторного использования. IDisposable
подразумевает, что вы хотели бы контролировать жизненный цикл ваших объектов и не собираетесь забирать их обратно. Это все равно что положить что-то в мусорный контейнер и сказать: «Я покончил с этим, теперь мне все равно, что будет с этим». Семантика WeakReference
похожа на то, чтобы положить что-то рядом с мусорным контейнером и сказать: «Я вернусь через 30 минут или около того, если никто не положит это в этот мусорный контейнер, я возьму это обратно, но если оно внутри, я не не волнует ".
Слабые ссылки подразумевают, что объекты, на которые они ссылаются, не имеют долгой жизни, что они хороши для быстрого восстановления памяти, но в то же время они дают некоторый шанс для повторного использования, так что в вашем случае вы можете положиться исключительно на WeakReference<T>
:
MyType instance;
if (weakRef.TryGetTarget(out instance))
{
// resurrected, still can use it
}
else
{
// object is collected, the new one should be created
}