![]() |
ApplicationDomain и интерфейсы
Всем привет
Суть ситуации вот в чем: - Есть swf-контейнер для нескольких игр - Есть несколько swf-файлов, в которых зашиты несколько вариантов логики игры (класс Game, называется так во всех swf-ках). - Далее, есть интерфейс IGame, который зашит во все swf-ки, включая контейнер. Идея такая, что swf-загрузчик обращается к логике любой игры через IGame. Но... Так как имена классов совпадают (логика везде называется Game), то во избежание повторения имен классов, я каждый раз swf с классом Game гружу в новый ApplicationDomain. И вот в чем весь косяк - интерфейс IGame в загружаемой swf-ке тоже попадает в новый ApplicationDomain, а значит, он уже не равен интерфейсу в swf-ке загрузчике. Соответственно, кастинг Game из загруженной swf-ки в IGame загружающей возвращает ровно null =( Уфф... ну вот, наконец-то, и сам вопрос - как лучше с этим разобраться, при учете, что необходимо сохранить имя класса Game во всех swf-ках? UPD: Судя по всему, нужного эффекта никак не добиться. По сути, мне нужно было перезаписать класс Game в текущем домене приложения, чего сделать никак нельзя. Единственный выход для сохранения строгой типизации - это изменение имен классов в загружаемых swf-ках и загрузка этих swf-ок в ApplicationDomain.currentDomain |
Значит игра плохо выгружается, если остается Game в домене.
|
А как лучше выгрузить?
Тупо unload? Просто у меня была мысль завести отдельный домен и каждый раз грузить в него. Чтобы обращаться не loader.contentLoaderInfo.applicationDomain, а просто myCustomDomain. Но почему-то через loader дефинишн есть, а через customDomain - нет =) Может я чего-то не так понял из доков |
Домен должен быть дочерним к текущему, хотя бы.
unload да, и все ссылки поубивать. |
Цитата:
Только как быть с доменом? Я гружу в кастомный домен, который дочерний к текущему домену приложения. Затем тем же лоадером гружу в еще один домен, который тоже дочерний к текущему. По окончании загрузки всего - loader.unload После этого, мне по идее, нужно только убить ссылки на домены (создать новые домены по тем же ссылкам) и на экземпляры классов из доменов. После этого можно грузить заново классы с такими же именами? |
Надо грузить всегда в один и тот же домен (дочерний), не пересоздавая. Ссылок на классы из домена при выгрузке быть не должно. В консоли как минимум должен появится [Unload SWF], если всё прошло удачно.
|
Ага, то есть получается, что swf-ка намертво привязана к loader'у
Я полагал, что она лежит в домене, а loader просто имеет на нее ссылку Спасибо, вроде разобрался. |
Лоадер можно пересоздавать, а домен постоянный. Это не принципиально, можно все пересоздавать.
|
Код AS3:
И почему оно не кастуется в интерфейс зашитый в оба файла? |
Меня первая строчка смущает.
|
там должно быть ApplicationDomain.currentDomain =)
недописал Однако, сути вопроса это не меняет |
У меня работает так:
Код AS3:
|
Все кастуется на самом деле и удаляется с использованием указанного Вами подхода.
У меня не кастовалось в среде разработки, очевидно из-за securityDomain (потому что больше я причин не вижу, в браузере все работает и трейсит true, а в FD говорит false и ломается) Еще раз спасибо |
| Часовой пояс GMT +4, время: 20:25. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.