Общее:
1. Передачу настроек для конструкторов основных классов нужно переделать по-другому. Но для текущей задачи подходит.
2. Не хочу оправдываться, но времени особо не было (семейные обстоятельства), а затягивать не хочу. Две ночи два варианта
реализации данного задания. version1 и version2 как переменые компилятора. Во втором случае ищутся все классы реализацией
соответствующего интерфейса. т.е. должен появиться вариант вывода Console. В version1 - только файл. Реализовывать работу
с БД не стал. В качестве БД хотел использовать SQLite. Важно отличие использования в DI контейнере, на мой взгляд, это
время жизни. Для объекта работы с БД - один экземпляр на все время выполнения приложения. Если будет необходимость
могу за еще один вечер реализовать.
Обработчики:
1. теоретически обработчиков может быть несколько, например, один может писать только в одно место результаты, а другой использовать делегат и т.п.
Если их много, то можно выделить абстрактный класс, который содержит в себе общие элементы. Но для данной задачи это не требуется.
2. У них нет конструктора с настройками, потому что для данной задачи не нужно. Один из принципов рекомендует не писать неиспользуемый код.
Тесты:
1. С тестами я не очень плотно знаком. Для файлов тесты сделал. Еще бы не помешал тест для привязки классов. Для БД создан тест, но не реализован,
так как нет самой реализации использования.