Сообщение Re: Фабрика классов работающая по атрибуту класса от 08.09.2017 16:39
Изменено 08.09.2017 16:47 VladD2
Re: Фабрика классов работающая по атрибуту класса
Здравствуйте, CyberRussia, Вы писали:
CR>Озвучили мне идею — написать классам атрибут с характерным уникальным значением. А фабрика, чтобы получить входным параметром значение искала класс с соответствующим атрибутом и создавала экземпляр объекта.
CR>Не могу найти решение как реализовать. Смотрел на Type.GetType, но там поиск по имени, а не по атрибуту. Циклически перебирать подходящие классы... наверное можно, но возможно существует лучшее решение?
Мы похожую задачу решили так. Сделали атрибут уровня сборки в котором в качестве параметра typeof(класс_который_надо_создать).
Преимущества — скорость загрузки. Читаются только метаданных глобальных атрибутов. Это очень быстро.
Например, вот такой атрибут:
экспортирует объект поддержки проекта для некоторого языка реализуемого на Nitra
Сам атрибут.
А это код загрузки экземпляра.
CR>Озвучили мне идею — написать классам атрибут с характерным уникальным значением. А фабрика, чтобы получить входным параметром значение искала класс с соответствующим атрибутом и создавала экземпляр объекта.
CR>Не могу найти решение как реализовать. Смотрел на Type.GetType, но там поиск по имени, а не по атрибуту. Циклически перебирать подходящие классы... наверное можно, но возможно существует лучшее решение?
Мы похожую задачу решили так. Сделали атрибут уровня сборки в котором в качестве параметра typeof(класс_который_надо_создать).
Преимущества — скорость загрузки. Читаются только метаданных глобальных атрибутов. Это очень быстро.
Например, вот такой атрибут:
[assembly: ProjectSupport("Nitra C#", typeof(CSharp.CompilationUnit))]
экспортирует объект поддержки проекта для некоторого языка реализуемого на Nitra
Автор: VladD2
Дата: 12.01.17
.Дата: 12.01.17
Сам атрибут.
А это код загрузки экземпляра.
Re: Фабрика классов работающая по атрибуту класса
Здравствуйте, CyberRussia, Вы писали:
CR>Озвучили мне идею — написать классам атрибут с характерным уникальным значением. А фабрика, чтобы получить входным параметром значение искала класс с соответствующим атрибутом и создавала экземпляр объекта.
CR>Не могу найти решение как реализовать. Смотрел на Type.GetType, но там поиск по имени, а не по атрибуту. Циклически перебирать подходящие классы... наверное можно, но возможно существует лучшее решение?
Мы похожую задачу решили так. Сделали атрибут уровня сборки в котором в качестве параметра typeof(класс_который_надо_создать).
Преимущества — скорость загрузки. Читаются только метаданных глобальных атрибутов. Это очень быстро.
Например, вот такой атрибут:
экспортирует объект поддержки проекта для некоторого языка реализуемого на Nitra
Сам атрибут.
А это код загрузки атрибутов.
А вот, код создания экземпляра.
CR>Озвучили мне идею — написать классам атрибут с характерным уникальным значением. А фабрика, чтобы получить входным параметром значение искала класс с соответствующим атрибутом и создавала экземпляр объекта.
CR>Не могу найти решение как реализовать. Смотрел на Type.GetType, но там поиск по имени, а не по атрибуту. Циклически перебирать подходящие классы... наверное можно, но возможно существует лучшее решение?
Мы похожую задачу решили так. Сделали атрибут уровня сборки в котором в качестве параметра typeof(класс_который_надо_создать).
Преимущества — скорость загрузки. Читаются только метаданных глобальных атрибутов. Это очень быстро.
Например, вот такой атрибут:
[assembly: ProjectSupport("Nitra C#", typeof(CSharp.CompilationUnit))]
экспортирует объект поддержки проекта для некоторого языка реализуемого на Nitra
Автор: VladD2
Дата: 12.01.17
.Дата: 12.01.17
Сам атрибут.
А это код загрузки атрибутов.
А вот, код создания экземпляра.