У нашому програмному забезпеченні є кілька класів, які слід динамічно знаходити за допомогою рефлексії. Усі класи мають конструктор з певним підписом, за допомогою якого код відображення створює об'єкти.
Однак, коли хтось перевіряє, чи посилається на метод (наприклад, через Visual Studio Code Lens), посилання через відображення не враховуються. Люди можуть пропустити свої посилання та видалити (або змінити), мабуть, невикористані методи.
Як слід позначити / документувати методи, які слід викликати через рефлексію?
В ідеалі метод повинен бути позначений таким чином, щоб і колеги, і Visual Studio / Roslyn та інші автоматизовані інструменти «бачили», що метод повинен бути викликаний за допомогою рефлексії.
Я знаю два варіанти, які ми можемо використовувати, але обидва не дуже задовольняють. Оскільки Visual Studio не може знайти посилання:
- Використовуйте спеціальний атрибут та позначте конструктор цим атрибутом.
- Проблема полягає в тому, що властивості Attribute не можуть бути посиланням на метод, тому конструктор все одно покаже, що має 0 посилань.
- Колеги, не знайомі зі спеціальним атрибутом, ймовірно, проігнорують його.
- Перевагою мого теперішнього підходу є те, що частина відображення може використовувати атрибут для пошуку конструктора, який він повинен викликати.
- Використовуйте коментарі для документування того, що метод / конструктор призначений викликати через відображення.
- Автоматизовані інструменти ігнорують коментарі (і це можуть зробити і колеги).
- Коментарі XML Документація може використовуватися для того, щоб Visual Studio рахував додаткове посилання на метод / конструктор:
Нехай цеMyPlugin
буде клас, конструктор якого потрібно викликати через відображення. Припустимо, виклик коду відображення шукає конструкторів, які берутьint
параметр. Наступна документація робить те, що кодовий об'єктив показує конструктор, який має 1 посилання:
/// <see cref="MyPlugin.MyPlugin(int)"/> is invoked via reflection
Які кращі варіанти існують?
Яка найкраща практика для маркування методу / конструктора, який повинен бути викликаний за допомогою рефлексії?