Прежде чем ответить на ваш вопрос, я бы предложил переосмыслить вашу архитектуру Logger.Ведение журнала всегда одинаково.Вы пишете сообщение куда-нибудь.Единственное, что отличается, это часть где-то , поэтому имеет смысл разделить ваш Logger на общий Logger и различных Writers.Это обеспечивает большую гибкость, например, вы можете использовать шаблон Composite для одновременной записи в несколько регистраторов.
Относительно вашего вопроса: в общем, вы хотите избежать жесткого кодирования зависимостей в коде, потому что это напрямую повлияет натестируемость и возможность повторного использования, например, ваш регистратор может быть использован только с этим конкретным NullWriter.Если вы собираетесь распространять Logger, вам также придется распространять Writer.
Тем не менее, при условии, что вы все равно будете распространять Logger вместе со всем пакетом Writers, и вы также предоставите средства длявпрыск ctor, я не вижу большой проблемы.Вы все равно можете поменять Writer, если это необходимо, так что все хорошо.
Несколько иначе, когда мы говорим о межпакетных зависимостях.Вы можете избежать этого, например, ваши классы в пакете базы данных не должны зависеть от классов в пакете Logger.
Альтернативой назначению NullWriter изнутри Logger будет использование LoggerFactory, которая создает Logger.и указанный Writer вводит Writer и возвращает Logger.