C#: динамический вызов метода из внешней сборки

Задача. Имеется сборка ExtAssembly.dll с тремя методами:
  • public string JustMethod();
  • public string ParMethod(string str);
  • public static string StaticMethod().
В программе необходимо загрузить внешнюю сборку ExtAssembly.dll и поочередно вызвать каждый из методов.

Решение.
Для начала приведем код внешней сборки:
public class SampleClass
{
   public string
JustMethod() { return "JustMethod"; }
   public string
ParMethod(string str) { return "ParMethod with " + str; }
   public
static string StaticMethod() { return "StaticMethod"; }
}

Вызвать каждый метод можно следующим образом:
using System.Reflection; 
class SampleProgram
{    
   public static void Main(String[] args)
   {
      //загружаем сборку
      Assembly extAssemblyFile = Assembly.Load(new AssemblyName("ExtAssembly"));
      Type curType;
      object currentAssembly;    

      //находим единственный класс в сборке
      foreach (Type type in
extAssemblyFile.GetTypes())
      {
         if (type.IsClass)
         {
           
currentAssembly = extAssemblyFile.CreateInstance(type.FullName);
            curType = type;
         }
      }

      //получаем тип класса
      Type
ExtAssemblyType = ExtAssemblyFile.GetType("ExtAssembly.SampleClass");
      //создаем экземпляр класса
      object
ExtAssembly = Activator.CreateInstance(ExtAssemblyType);

      //вызов нестатичного метода без параметров
      String str = (string)curType.InvokeMember("
JustMethod"
,BindingFlags.Default | BindingFlags.InvokeMethod
,null
,
ExtAssembly
,new object[] { });
      Console.WriteLine(str); 

      //вызов нестатичного метода с параметрами
      object[] parameter = new object[] { "строка" };
      str =
(string)curType.InvokeMember("ParMethod"
,BindingFlags.Default | BindingFlags.InvokeMethod
,null
,
ExtAssembly
,parameter);
      Console.WriteLine(str);

      //вызов статичного метода без параметров
     
String str = (string)curType.InvokeMember("StaticMethod"
,BindingFlags.Default | BindingFlags.InvokeMethod
,null
,null
,new object[] { });
      Console.WriteLine(str);

   }
}

Как обычно, более глубокое раскрытие темы можно с легкостью найти в MSDN.
 
 

Статьи на схожую тематику:

Visual Studio 2010: Master Product Key и правила его формирования
.NET и не только: любите www.codeproject.com
C#: tooltip подсказки
C#: частичные классы
ASP.NET: доступ к Session из пользовательского класса