Однако в C# 11 появились статические методы в интерфейсах, поэтому технически мы можем это сделать:
Код: Выделить всё
public interface IFileHasher where T : IFileHasher
{
static abstract string ComputeHash(string filePath);
}
Код: Выделить всё
public class SHA256FileHasher : IFileHasher
{
public static string ComputeHash(string filePath)
{}
}
Код: Выделить всё
FileProcessor processor = new(new SHA256FileHasher())
Код: Выделить всё
FileProcessor processor = new()
Это поднимает вопрос: как бы выглядело внедрение зависимостей, если бы оно поддерживало статические зависимости, а C# имел лучшую поддержку синтаксиса? Какие плюсы и минусы?
Некоторые из них я могу придумать
Плюсы:
1. Быстрее — никаких выделений. Все преимущества статики в скорости.
2. Более четкая семантика. Некоторые идеи лучше представлять в виде статических вещей, а не сначала создавать объект класса, а затем использовать функцию-член.
3. Поощряет написание чистых функций.
Минусы:
1. Нет состояния или времени жизни
2. Вы теряете возможность динамически менять реализации во время выполнения.
Мобильная версия