Я ищу хорошее техническое решение для DI в C.
Я уже видел некоторые вопросы DI здесь, но я не видел ни одного с реальными примерами или конкретными предложениями по реализации.
Итак, допустим, у нас следующая ситуация:
У нас есть набор модулей в c; мы хотим реорганизовать эти модули, чтобы использовать DI для запуска модульных тестов и т. д.
Каждый модуль состоит из набора функций c:
module_function (...);
Модули зависят друг от друга. То есть. Обычно у вас может быть звонок, такой как:
int module1_doit(int x) {
int y = module2_dosomethingelse(x);
y += 2;
return(y);
}
Каков правильный подход к DI для этого?
Возможные решения:
(1) Использование указателей на функции для всех функций модуля и при вызове функции сделать это (или аналогично):
int y = modules-> module2-> dosomethingelse (x);
(2) Компилировать несколько библиотек (mock, std и т. Д.) С одинаковыми символами и динамически связывать их в правильной реализации.
(2), кажется, правильный способ сделать это, но это сложно настроить и раздражает, заставляет вас создавать несколько двоичных файлов для каждого модульного теста.
(1) Похоже, что он может работать, но в какой-то момент ваш DI-контроллер застрянет в ситуации, когда вам нужно динамически вызвать универсальную фабричную функцию (void ( factory) (. ..) скажем) с рядом других модулей, которые должны быть внедрены во время выполнения?
Есть ли другой, лучший способ сделать это в c?
Каков «правильный» способ сделать это?