It should take account [NotNull] and [CanBeNull] attributes and make appropriate parameters optional 