Я создаю игровой движок на C #, и моя цель - иметь возможность динамически редактировать и перезагружать классы компонентов, которые также написаны на C #. Из того, что я обнаружил с помощью нескольких разных примеров, действительно можно загрузить сборку (DLL) в домен приложений, затем выгрузить ее и перезагрузить отредактированную / перекомпилированную версию на свое место. Благодаря моему собственному тестированию я обнаружил, что он работает довольно хорошо, осталась только одна проблема - исключить все ссылки во время выполнения на конкретный экземпляр этого объекта, чтобы его можно было перезагрузить и заменить.
По сути, я хотел бы получить список всех ссылок на определенный объект. Я знаю, что это может быть совершенно невозможно в C #, поскольку это сильно зависит от языка, хранящего список всех объектов, ссылающихся на определенный объект. Не имеет значения, является ли реализация невероятно медленной, если она работает правильно.
Я вставил здесь псевдокод для того, что я хочу сделать:
http://nopaste.dk/p3059
Я знаю, что один из способов сделать это - иметь свой собственный тип "слабой ссылки", который я в основном использую везде, и никогда не создавать прямых ссылок на объект. Это похоже на головную боль, но, по крайней мере, выгрузка AppDomain вызовет исключение, если какие-либо истинные ссылки на объект все еще существуют. По сути, это дает мне управление, а не автоматическое и принудительное исполнение.
Если вы знаете хороший способ сделать это, или вы думаете, что я делаю что-то в корне неправильно, не стесняйтесь говорить, и спасибо!