Как использовать строки типа .NET в моих программах?
-
01-10-2019 - |
Вопрос
Например, в App.config вы можете получить
<configuration>
<configSections>
<section name="MyConfig" type="MyAssembly.MyType, MyAssembly, PublicKeyToken=null" />
</configSections>
...
</configuration>
Подпись в части типа, кажется, стандартизирована в различных местах .NET, но я понятия не имею, как это сделать в моих собственных программах. я использовал System.Activator
В моих программах, но это похоже на дублирующую работу, что .NET уже делает.
В условиях программирования Как мне это сделать:
void Main()
{
object instance = CreateInstance("MyAssembly.MyType, MyAssembly, PublicKeyToken=null");
Console.WriteLine(instance.GetType().Name);
}
object CreateInstance(string dotNetTypeSignature)
{
// Code goes here.
}
Решение
Вы можете назвать Type.GetType
метод чтобы получить Type
Объект с именем данного (квалифицированного сборки).
Вы можете назвать Activator.CreateInstance
метод создать экземпляр типа. (Предполагая, что тип имеет публичный конструктор по умолчанию, или что вы знаете, какие аргументы конструктора нужны).
Например:
Activator.CreateInstance(Type.GetType(name));
Другие советы
Эти разделы обычно создаются / доступ к дизайнеру настроек Visual Studio.
В исследовательском исследовании смотрите по свойствам-> Настройки. Подвески или через щелчок правой кнопкой мыши на названии проекта-> Параметры -> Настройки.
Имя полного типа обычно используется для «позднего» привязки к определенному типу. В примере конфигурации файла у вас есть, фактический тип секции конфигурации не был известен в The CLR Time Time, поэтому ConfigurationManager
должен прочитать фактический тип, образующую файл конфигурации и неttantiate его во время выполнения. Это делается с использованием System.Activator
Класс, как вы упоминали, и это стандартный способ сделать это по всему миру .NET.
Конечно, если тип, который вы хотите создать экземпляр, известен при сборке, вы должны просто ссылаться на сборку, которая содержит его и использовать new
. Отказ Тем не менее, если вы хотите реализовать расширяющуюся расширяющую способность, например ConfigurationManager
, вы должны использовать Activator
CreateInstance
или CreateInstanceFrom
Методы, которые имеют переопределение, которые позволяют пройти точную строку, как прочитать из любого использования конфигурации, или экземпляр Type
, который также может быть создан из той же строки.
И, конечно же, есть другая сторона, где любая реализация вашей точки расширения должна записать имя полного типа. Для этого вы можете использовать typeof(MyType).FullName
, или myInstance.GetType().FullName
.