ПРИМЕЧАНИЕ: Я понимаю, что этот вопрос похож на эту SO-тему , но я спрашиваю о конкретном случае здесь, поэтому, пожалуйста, не закрывайте этот вопрос как дубликатиз этого.
Я пытаюсь сделать мой C # более функциональным, и читал «Функциональное программирование в C #» Энрико Буонанно.Один из методов, которые он показывает, - это класс Try
, который позволяет изящно обрабатывать исключения.Вы можете увидеть код для Try
класса здесь .
Это все очень аккуратно, но в реальном приложении я бы хотел регистрировать исключения.Поскольку его класс статичен, я не вижу способа сделать это.Как объяснено в связанном вопросе SO выше (среди прочего), внедрение в статический класс либо невозможно, либо не является хорошей идеей.
Единственные варианты, которые я вижу, это:
Требование к потребляющему коду для создания экземпляра класса Try
(в настоящее время это невозможно с его кодом), в отличие от вызова статического метода.Это делает код намного менее чистым
Добавление статического свойства ILogger
в класс Try
и установка его перед использованием класса.Я не хочу этого делать, поскольку класс Try
будет использоваться как на клиенте, так и на сервере в моем приложении, и регистратор будет отличаться в двух случаях
Добавление параметра ILogger
в методы класса.Мне не нравится это по тем же причинам, что и в 1.
Доступ к средству разрешения зависимостей внутри класса try
и получение экземпляра регистратора.Это будет означать, что код, использующий Try
, также в конечном итоге будет регистрироваться в файле, что не является хорошей идеей.Подход кажется таким чистым и аккуратным, но в нем также отсутствует очевидная базовая функция.