Уютное сообщество C# - обучающий канал для разработчиков.
Полезные материалы по языку программирования.
Тесты на знание C#
Подсказки и трюки языка
@aldrson @viktorreh
Post #72
2.47K
Freeze/Inject/Register в AutoFixtureДавным-давно, в первых версиях библиотеки балом правил
Register. Два других метода ещё не существовали.Определён он был следующим образом:
public static void Register<T>(this IFixture fixture, T item)
Однако, была и перегрузка:public static void Register<T>(this IFixture fixture, Func<T> creator)
Какое-то время казалось, что это нормально, впрочем, вскоре пользователи стали путаться. Например, можно было написать следующий код:fixture.Register(() => universe.LightUp());
Поскольку делегат может получаться путём приведения ссылкой на метод, то валидной была и следующая запись:fixture.Register(universe.LightUp);
Что если universe.LightUp это обращение к свойству, а не к методу? Тогда была бы выбрана первая перегрузка.Но это крайне неочевидно.
Поэтому первая перегрузка превратилась в
Inject<T>(this IFixture fixture, T item).У метода
Freeze несколько другая история.В прошлом оказалось, что достаточно часто встречается следующее использование AutoFixture в императивном стиле:
var foo = fixture.Create<Foo>();
fixture.Inject(foo);
Тогда, автор библиотеки решил, что это так называемая концепция заморозки.В итоге два вызова превратились в один метод
Freeze.#полезное #tips


