Как использовать строки типа .NET в моих программах?

StackOverflow https://stackoverflow.com/questions/3661690

Вопрос

Например, в 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top