С методом, который принимает Func<T> в построителе объектов
Я пытаюсь создать Object Builder, чтобы я мог легко создавать объекты для модульного тестирования. Я хотел бы создать метод With(), чтобы я мог передать Func<>, и он установит правильное свойство для меня.
Вот что у меня так далеко:
public class EquipmentModelBuilder
{
public EquipmentModel Object { get; set; }
public EquipmentModelBuilder()
{
Object = new EquipmentModel();
}
public EquipmentModelBuilder WithCategory(int categoryId)
{
Object.EquipmentCategoryID = categoryId;
return this;
}
public EquipmentModelBuilder With(Func<EquipmentModel> setter)
{
Object = setter.Invoke();
return this;
}
public EquipmentModel Build()
{
return Object;
}
}
Конечно, WithCategory() работает, но я не хочу создавать все методы для каждого свойства, я хотел бы иметь возможность:
EquipmentModelBuilder.With(x => x.Property1 = 1).With(x => x.Property2 = "2").Build()
Есть идеи, что я делаю не так?
2 ответа
Решение
Вам нужно использовать Action<EquipmentModel>
в качестве вашего аргумента, а не Func<EquipmentModel>
,
public EquipmentModelBuilder With(Action<EquipmentModel> setter)
{
setter.Invoke(this.Object);
return this;
}
Я думаю что Func<EquipmentModel>
определяет функцию, которая возвращает EquipmentModel, так что вы хотели бы Action<EquipmentModel>
которая определяет функцию без возврата, которая принимает EquipmentModel в качестве параметра.