Createinstance () - я делаю это правильно?

При ближайшем рассмотрении, нет ничего плохого в создании заголовков таблиц Named Ranges. Это потому, что такие имена присваиваются структурированной ссылке, а не необработанному адресу ячейки, , поэтому они будут перемещаться вместе со столбцом!

names table entry

С другой стороны, это имя не печатается в поле адреса (по крайней мере, в Office 2007) при выборе заголовка, что довольно неудобно (потому что я не могу быстро найти имя, которое я должен набрать в код, чтобы получить этот столбец).

no range name shown

5
задан Kara 2 January 2014 в 04:43
поделиться

2 ответа

В целом стратегия должна работать. Вызов Assembly.LoadFrom загрузит целевую сборку в процесс. Оттуда можно проводить проверку типов и создавать экземпляры этих типов.

Я думаю, что самый простой и надежный способ создания экземпляра - это использовать метод Activator.CreateInstance.

For Each def As Type in ClassDefs
  Dim inst = Activator.CreateInstance(def)
  PluginsData.Add(new LoadedPluginsInfo(inst.Plugin(), False))
Next

В зависимости от ваших целей, другим предложением было бы переместить блок Try / Catch в цикл, а не из него. Наличие блока Try / Catch снаружи цикла означает, что если какой-либо конкретный тип в сборке имеет ошибку, вы отбрасываете все типы из этой сборки. Перемещение внутрь позволит вам отбросить только те типы, которые не работают должным образом. Хотя текущее поведение может быть вашим намерением.

3
ответ дан 15 December 2019 в 01:11
поделиться

Это должно сработать, я уже использовал подобные вещи в некоторых проектах раньше. Я специально искал конструктор и вызывал его, но помимо этого это была та же идея.

Но вы можете захотеть взглянуть на MEF , который позаботится о МНОМ для вас о плагине архитектура (если вы готовы немного подождать релизную версию, это пока CTP).

1
ответ дан 15 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: