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