Вы можете реализовать метод с общей сигнатурой, а затем создать тип, передаваемый в параметр типа.
Вы должны указать условие new()
.
Это означает, что оно будет принимать только те типы, которые имеют пустой конструктор.
Как это:
public IPage CreateOnRequirement<TCreationType>() where TCreationType:IPage,new()
{
return new TCreationType();
}