Reflection C#. Типы данных в сборках запущеного проекта. Как получить тип (Type) по названию (string)

вторник, 19 мая 2009, Oleksandr Reminnyi

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

Исходные данные - файл с названием некоторого класа и именем сборки, где класс находиться, например:

assamblyList.txt:

MyAplicationDll.Class1, MyAplicationDll

MyAplication2Dll.Class1, MyAplication2Dll

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

Для парсинга сборок - используем приведенную дальше функцию:

  static Assembly[] assemblies;

  static void ParseAssemblyList()
  {
   List typeNames = new List();
   StreamReader reader = new StreamReader("assamblyList.txt");  
  
   string path = null;
   while((path = reader.ReadLine()) != null)
   {
    if(path != string.Empty)
    {
     typeNames.Add(path);
    }
   }

   if (typeNames.Count > 0)
   {
    assemblies = new Assembly[typeNames.Count];   
    for(int i = 0; i < assemblies.Length; i++)
    {
     assemblies [ i ] = Type.GetType(typeNames[ i ], true).Assembly;
    }
   }
  }

   Имея данные о сборках, можно искать в них уже нужные типы данных.

  public static Type GetType(string typeName)
  {
   Type type = null;    
   for(int i = 0; i < assemblies.Length; i++)
   {
    type = assemblies[ i ].GetType(typeName);
    if(type != null)
    {    
     break;
    }
   }
   if(null == type)
   {
    type = Type.GetType(typeName, false); //на случай, когда запрашиваеться системный тип, например "System.Boolean"
   }
   return type;
  }

Указав сбоки, доступные для парсинга, вы сможете получить доступ таким методом ко всем типам данных внутри этих сборок.


Ищите нас в интернетах!

Комментарии

Свежие вакансии