- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
public static MapObjectConfig[] CollectInfoAboutClassesInProgram()
{
List<MapObjectConfig> result = new List<MapObjectConfig>();
foreach (Assembly assem in AppDomain.CurrentDomain.GetAssemblies())
foreach (Module module in assem.GetModules())
try
{
foreach (Type type in module.GetTypes())
if (type.IsSubclassOf(typeof(BaseMapObject)))
{
MethodInfo method = type.GetMethod("GetCommentDescription", BindingFlags.Static | BindingFlags.Public);
if (method != null)
{
object res = method.Invoke(null, null);
if (res is MapObjectConfig)
{
MapObjectConfig desc = (MapObjectConfig)res;
result.Add(desc);
}
}
}
}
catch (ReflectionTypeLoadException ex)
{
//иногда отказывается загружать типы...
}
return result.ToArray();
}
Метод являет собой пожалуй самую проктологическую реализацию хранения дефолтных настроек, которую когда-либо видел. Просмотр всех сборок загруженых в домен приложения, поиск в них классов наследованных от BaseMapObject и вызов их метода GetCommentDescription, который и вернет объект с настройками... Нельзя обезьянам давать гранаты товарищи.
guest 03.03.2010 07:32 # 0
svist 09.03.2010 15:28 # 0
guest 18.03.2010 16:49 # 0
svist 19.03.2010 01:46 # 0
История происхождения сего говнокода длинная... Писался некий компонент для работы с географическими картами и естествено были выделены отдельные классы для различных типов георафических объектов (количество их заранее планировалось аж 4 штуки). Вот для этих то классов настроечки и нужны типа стили линий, подписей и прочая хрень связанная с их отображением. Все это было в одной сборке и мирно жило да работало. Поручили дописывать сие хозяйство некому говнокодеру. Результат: он классы для географических объектов начал писать не в единой сборке, а растаскивать по сборкам в которых пользовался компонент картографический. Ну а когда пришло время настройки все оформить, то он родил говно такое. Впрочем даже если растащить классы как было сделано неким говнокодером, то для загрузки настроек можно реализовать и более простые подходы.
Да самый смак будет если в один прекрасный день скажут типа сделать у всех объектов дефолтный цвет красный, например...Хаха, сей говнокод наводит на говнорешение проблемы...)))))))