C# Итерация по классам, вызывающим одну и ту же функцию

У меня есть несколько классов, все они находятся в отдельном пространстве имен. Все классы происходят от одного и того же базового класса, все имеют одну и ту же функцию и принимают одни и те же параметры. Я хотел бы иметь возможность перебирать классы, вызывая указанную функцию.

Я знаю, что могу получить список классов, используя следующее:

var validationClasses = Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.Namespace == "Panther.Business.Shipping.Validate")
.ToList();

И, конечно же, я могу перебирать каждый класс в validationClasses.

Но я не могу понять, как создать экземпляр каждого класса и вызвать эту функцию.

Любое направление высоко ценится.

См. этот ответ

sm_ 21.12.2020 06:13
validationClasses — это набор типов. Вам нужно использовать Acticator.CreateInstance для создания экземпляров типов в этой коллекции. stackoverflow.com/questions/752/…
Chetan 21.12.2020 06:14

Вы пытаетесь сделать то, что любой DI-контейнер делает из коробки. Хотя это может быть полезно для образовательных целей, рассмотрите возможность использования DI. По крайней мере, это будет более реалистичный сценарий.

Dennis 21.12.2020 07:01
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
3
481
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предполагая базовый класс ValidationBase, вы можете сделать что-то вроде:

Type baseType = typeof(ValidationBase);
MethodInfo method = baseType.GetMethod("MethodName");

var validationClasses = Assembly.GetExecutingAssembly()
                                .GetTypes()
                                .Where(t => t.IsSubclassOf(baseType));

foreach(Type t in validationClasses)
{
  var instance = Activator.CreateInstance(t);
  method.Invoke(instance, null); // Replace `null` with array of arguments if necessary
}

Другие вопросы по теме