Информация об изменениях

Сообщение Re: Фабрика классов работающая по атрибуту класса от 08.09.2017 16:39

Изменено 08.09.2017 16:47 VladD2

Re: Фабрика классов работающая по атрибуту класса
Здравствуйте, CyberRussia, Вы писали:

CR>Озвучили мне идею — написать классам атрибут с характерным уникальным значением. А фабрика, чтобы получить входным параметром значение искала класс с соответствующим атрибутом и создавала экземпляр объекта.

CR>Не могу найти решение как реализовать. Смотрел на Type.GetType, но там поиск по имени, а не по атрибуту. Циклически перебирать подходящие классы... наверное можно, но возможно существует лучшее решение?

Мы похожую задачу решили так. Сделали атрибут уровня сборки в котором в качестве параметра typeof(класс_который_надо_создать).

Преимущества — скорость загрузки. Читаются только метаданных глобальных атрибутов. Это очень быстро.

Например, вот такой атрибут:
[assembly: ProjectSupport("Nitra C#", typeof(CSharp.CompilationUnit))]

экспортирует объект поддержки проекта для некоторого языка реализуемого на Nitra
Автор: VladD2
Дата: 12.01.17
.

Сам атрибут.

А это код загрузки экземпляра.
Re: Фабрика классов работающая по атрибуту класса
Здравствуйте, CyberRussia, Вы писали:

CR>Озвучили мне идею — написать классам атрибут с характерным уникальным значением. А фабрика, чтобы получить входным параметром значение искала класс с соответствующим атрибутом и создавала экземпляр объекта.

CR>Не могу найти решение как реализовать. Смотрел на Type.GetType, но там поиск по имени, а не по атрибуту. Циклически перебирать подходящие классы... наверное можно, но возможно существует лучшее решение?

Мы похожую задачу решили так. Сделали атрибут уровня сборки в котором в качестве параметра typeof(класс_который_надо_создать).

Преимущества — скорость загрузки. Читаются только метаданных глобальных атрибутов. Это очень быстро.

Например, вот такой атрибут:
[assembly: ProjectSupport("Nitra C#", typeof(CSharp.CompilationUnit))]

экспортирует объект поддержки проекта для некоторого языка реализуемого на Nitra
Автор: VladD2
Дата: 12.01.17
.

Сам атрибут.

А это код загрузки атрибутов.
А вот, код создания экземпляра.