Я ищу хорошее техническое решение для выполнения 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), кажется, правильный способ сделать это, но его сложно настроить и раздражать, заставляя вас создавать несколько двоичных файлов для каждого unit test.
(1) Кажется, что это может сработать, но в какой-то момент ваш контроллер DI будет застревать в ситуации, когда вам нужно динамически вызывать общую функцию factory (void (factory) (... )) с рядом других модулей, которые нужно вводить во время выполнения?
Есть ли другой, лучший способ сделать это в c?
Какой "правильный" способ сделать это?