Ваши причины выбора Composition vs Inheritance должны быть хорошо известными принципами SOLID.Тогда «композиция благосклонности перед наследованием» является следствием их, IMO.
IMO у вас есть класс Utility, когда
- это статично (как сказал Саурабх);
- задачи не связаны с конкретным доменом, но связаны с необработанными данными (например, утилита для реверсирования списков);
- его функции не имеют побочных эффектов;
- альтернативы нетреализации его функций.
В любом случае, с расширениями C # теперь редко можно создавать служебный класс.
С помощью служебного класса вам не нужно его внедрять (этостатичный и проверяемый).Если вместо этого у вас есть композиция, принцип инверсии зависимостей гласит, что вы должны «зависеть от абстракций, а не от конкреций», поэтому вы можете покинуть контейнер для внедрения своих абстракций.