При создании беглого API, как цепочечные методы получают контекст из предыдущих методов? - PullRequest
0 голосов
/ 18 октября 2011

Я смотрю на этот проект с открытым исходным кодом, и свободный API выглядит следующим образом:

baseEngine.For<Foo1>()
            .Setup(f => f.Value)
              .MustEqual(1);

Затем перечислите параметры метода MustEqual:

 public static M MustEqual<M, T, R>(this IMustPassRule<M, T, R> mpr, R value)
 {
    return mpr.MustPassRule(new EqualRule<R>(value));
 }

для более подробной информации: http://rulesengine.codeplex.com/SourceControl/changeset/view/9077#137411

Итак, что я пытаюсь получить, так это то, что вызов MustEqual передается только в виде одного аргумента, так как он свободно говорит, он каким-то образом неявно выбирает другие необходимые параметры из ранее связанных вызовов? 1011 *

Ответы [ 3 ]

2 голосов
/ 18 октября 2011

Состояние сохраняется в самом объекте этими предыдущими методами, если необходимо.

0 голосов
/ 18 октября 2011

Хороший пример можно найти в LINQ

. IEnumerable<T>.OrderBy возвращает IOrderedEnumerable<T>

. Этот второй интерфейс отслеживает порядок, поэтому IOrderedEnumerable<T>.ThenBy может выполнитьсуб-рода.Чтобы все было гладко, интерфейс получен из IEnumerable<T>

0 голосов
/ 18 октября 2011

Вы смотрите на Метод расширения .

Методы расширения позволяют вызывать статические методы с синтаксисом метода экземпляра.Например,

something.MustEqual(1);

эквивалентно

RulesHelper.MustEqual(something, 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...