Разрешить тип от имени класса в другой сборке
У меня есть метод, где мне нужно разрешить Тип класса. Этот класс существует в другой сборке с пространством имен, похожим на:
MyProject.Domain.Model
Я пытаюсь выполнить следующее:
Type.GetType("MyProject.Domain.Model." + myClassName);
Это отлично работает, если код, выполняющий это действие, находится в той же сборке, что и класс, тип которого я пытаюсь решить, однако, если мой класс находится в другой сборке, этот код не работает.
Я уверен, что есть намного лучший способ выполнить эту задачу, но у меня не было большого опыта в разрешении сборок и пересечении пространств имен внутри, чтобы решить тип класса, который я ищу. Любые советы или советы для выполнения этой задачи более изящно?
Ответы
Ответ 1
Вам нужно будет добавить имя сборки следующим образом:
Type.GetType("MyProject.Domain.Model." + myClassName + ", AssemblyName");
Чтобы избежать двусмысленности или если сборка находится в GAC, вы должны предоставить полное имя сборки, например:
Type.GetType("System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
Ответ 2
Можно ли использовать один из стандартных способов?
typeof( MyClass );
MyClass c = new MyClass();
c.GetType();
Если нет, вам нужно будет добавить информацию в Type.GetType о сборке.
Ответ 3
Краткий и динамичный подход с использованием свойства AssemblyQualifiedName
-
Type.GetType(Type.GetType("MyProject.Domain.Model." + myClassName).AssemblyQualifiedName)
Наслаждайтесь!
Ответ 4
Сначала загрузите сборку, а затем тип.
например:
Сборка DLL = Assembly.LoadFile(PATH);
DLL.GetType(TypeName);