Решение Пако, согласно которому один объект рассматривается как субъект, а другой - как параметр, с использованием инжекции конструктора, может иногда работать, но если оба объекта создаются после объекта спецификации, это делает вещи довольно сложными.
Одним из решений этой проблемы является использование объекта параметра, как в этом предложении по рефакторингу: http://sourcemaking.com/refactoring/introduce-parameter-object.
Основная идея заключается в том, что если вы чувствуете, что как Заказчик, так и Контракт являются параметрами, представляющими связанную концепцию, тогда вы просто создаете другой объект параметров, который содержит их оба.
public class ParameterObject
{
public Customer Customer { get; set; }
public Contract Contract { get; set; }
}
Тогда ваша общая спецификация становится для этого типа:
public class SomeSpecification : ISpecification<ParameterObject>
{
public bool IsSatisfiedBy(ParameterObject candidate)
{
return false;
}
}