Без дополнительной информации о том, что отличает метод, я просто собираюсь предположить, что он различается по имени, и он общедоступен. Предположение имени опасно, поэтому я бы не рекомендовал делать это, но следующее должно делать то, что вы хотите (при условии, что Activator
может создать экземпляр).
РЕДАКТИРОВАТЬ : Добавлено Where(x => x.Namespace == "My.Name.Space")
, чтобы ограничить результаты одним целевым пространством имен.
EDIT : добавлено if ... else
для обработки случая статических методов.
var methods = AppDomain.CurrentDomain.GetAssemblies()
.Select(x => x.GetTypes())
.SelectMany(x => x)
.Where(x => x.Namespace == "My.Name.Space")
.Where(c => c.GetMethod("MethodName") != null)
.Select(c => c.GetMethod("MethodName"));
foreach (MethodInfo mi in methods)
{
if (mi.IsStatic)
{
mi.Invoke(null, null); // replace null with the appropriate arguments
}
else if (!mi.DeclaringType.IsAbstract)
{
var obj = Activator.CreateInstance(mi.DeclaringType);
mi.Invoke(obj, null); // replace null with the appropriate arguments
}
}
Если у вас есть контроль над типами, предложение jrummel об интерфейсах - гораздо более безопасный способ сделать это.