AlekXL
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Alexey_Gawrilow Цитата: Я использую на полную катушку в качестве ServiceLocator. У меня ГлавнаяФорма, ГлавныйМодуль могут вообще не знать о интерфейсе ничего. И тем не менее его реализовать.. не сами конечно. Если модуль(dcu) затесался в uses, или подгружен динамически(dll)... | я тоже к подобному пришел, когда у меня появились проблемы с unit circular reference. Сначала решил проблему, разбив основные модули на несколько штук, но выходило, что компилятор по 5 раз пытался скомпилить юнит один, проходя по списку uses в Interface и Implementation. Потом заинтерфейсил, скрепя сердце, основные классы, и дошел до ServiceLocator. Другое дело, что в современной Delphi , фреймворк Spring4Delphi ужасно толстый. А вот под 2007 есть оказывается фреймворк DDioc, который делает то же, и утизилизует $METHODINFO на всю катушку. Там есть свой инвокер-- генератор бинарного кода, который может вызвать , вероятно, любой метод, с параметрами по его сигнатуре. После незначительного допила, удается вызывать конструктор с параметрами наперед неизвестного класса с реализацией нужного интерфейса. Все это -- под классическими D2007. $METHODINFO+DDioc также открывает интересные возможности по экспорту классов в dws2(оригинальный dws2 с sf.net). Раньше я с automated RTTI страдал. Но я не совсем понимаю, зачем классу реализовывать неявно интерфейс, если самому классу даже контракт неизвестен? Чтобы главный интерфейс(у меня это IEngine) можно было привести к любому аспекту функционала? У меня просто есть юнит InterfaceServices, в котором есть singleton сервис локатора. |