Контейнер IoC для VBA - PullRequest
       56

Контейнер IoC для VBA

2 голосов
/ 15 мая 2019

Хорошо прочитал о DI здесь, в VBA:

https://rubberduckvba.wordpress.com/2016/07/05/oop-vba-pt-2-factories-and-cheap-hotels/

Так что теперь следующим шагом будет использование контейнера IoC в VBA. Но мне интересно, возможно ли это вообще! Я новичок в VBA и не могу понять несколько вещей:

  1. Если сделано в VBA, VBA не имеет пространств имен или эквивалента типа из C #. Так как в моей таблице поиска будет храниться уникальный ключ для типа?
  2. Я думал о написании com-библиотеки на C # и реализации там IoC, но я не могу понять, как передать тип интерфейса на интерфейс com. Я даже не могу создать экземпляр интерфейса, чтобы передать его как объект в com.

Я ограничен использованием строк и реализацией пространств имен в VBA с использованием модулей?

PS: Я не нашел какой-либо существующей реализации контейнера IoC для vba, поэтому, если таковая имеется, я весь слух!

1 Ответ

3 голосов
/ 15 мая 2019

Это буквальный Святой Грааль , за которым мы все время гонялись: возможность создания экземпляра класса VBA в процессе работы из кода C #.В ту минуту, когда мы выясним, как это сделать, IoC-контейнер для кода VBA станет определенной возможностью и будет полностью поставляться с Rubberduck вместе с полнофункциональной макетной структурой .

VBA.решение, вероятно, не представляется возможным, поскольку, как упоминалось в @this, New динамическое создание экземпляра класса без системы типов и без отражения ... ... это волшебство чистой черной магии.

Отмена технических проблемнужно задаться вопросом: будет ли контейнер IoC иметь такую ​​огромную разницу?

Правда в том, что это не так.Внедрение зависимостей не нуждается в контейнере IoC , «Бедняжка DI» работает отлично и, я могу добавить, даже предпочтительнее.

Я утверждаю, что если вы достигли точкигде контейнер IoC имеет смысл для вашего проекта VBA, и вы понимаете все о DI и SOLID и пишете свой код соответствующим образом ... тогда [не отнимать ничего от VBA, но] моя оценка состоит в том, что вы совершенно не готовы двигаться дальшеот VBA и работать с другими языками, поддерживающими ООП, такими как VB.NET или C #, - и использовать все, что вы узнали об ООП в VBA, открывая при этом совершенно новый диапазон возможностей с помощью параметризованных конструкторов, наследования классов, делегатов, лямбд, LINQ.и многое другое.

...