【问题标题】:When creating a fluent api, how do they chained methods get context from previous methods?在创建 fluent api 时,它们链接的方法如何从以前的方法中获取上下文?
【发布时间】:2011-10-18 16:14:02
【问题描述】:

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

【问题讨论】:

  • 你说的是“这个 IMustPassRule mpr”吗?如果是这样,那么这是一个 C# 构造,用于为 IMustPassRule 接口创建扩展方法

标签: c# api lambda fluent


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您正在查看Extension Method

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

    something.MustEqual(1);
    

    等价于

    RulesHelper.MustEqual(something, 1);
    

    【讨论】:

      【解决方案3】:

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

      IEnumerable&lt;T&gt;.OrderBy 返回一个IOrderedEnumerable&lt;T&gt;

      第二个接口跟踪订单,因此IOrderedEnumerable&lt;T&gt;.ThenBy 能够进行子排序。为了使事情顺利进行,界面派生自IEnumerable&lt;T&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-30
        • 1970-01-01
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        • 1970-01-01
        相关资源
        最近更新 更多