在创建流畅的api时,它们如何通过以前的方法获取上下文的方法?

时间:2011-10-18 16:14:03

标签: c# api lambda fluent

我正在看这个开源项目,流畅的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的调用只传递了一个争论,因为它很流畅,它是否以某种方式隐含地从以前链接的调用中获取其他必需参数?< /强>

3 个答案:

答案 0 :(得分:2)

如果需要,状态会被先前的方法存储在对象本身中。

答案 1 :(得分:0)

您正在查看Extension Method

扩展方法允许使用实例方法语法调用静态方法。例如,

something.MustEqual(1);

相当于

RulesHelper.MustEqual(something, 1);

答案 2 :(得分:0)

在LINQ中可以找到一个很好的例子

IEnumerable<T>.OrderBy会返回IOrderedEnumerable<T>

此第二个界面跟踪订单,以便IOrderedEnumerable<T>.ThenBy能够进行子排序。为了使事情顺利,界面来自IEnumerable<T>