6

MVC サイトに流暢な API を実装したいと考えています。私は基本を手に入れました。したがって、次のようなオブジェクト ライブラリを実装します。

public class UIElement{/*...*/}
public class ButtonBase : UIElement{/*...*/}
public class LinkButton : ButtonBase {/*...*/}

  public static class Extensions
  {
    public static T UIElementMethod<T>(this T element, string title)
      where T : UIElement
    {
      return element;
    }

    public static T ButtonBaseMethod<T>(this T element, string title)
      where T : ButtonBase
    {
      return element;
    }

    public static T LinkButtonMethod<T>(this T element, string title)
      where T : LinkButton
    {
      return element;
    }
  }

しかし、フラッシュメソッドを呼び出さずにカミソリビューで使用する方法。

@Html.UIproject().LinkButton()
    .UIElementMethod("asd")
    .ButtonBaseMethod("asd")
    .LinkButtonMethod("asd")

しかし、それはクラスの名前を返します。MvcHtmlString に暗黙の演算子を作成しようとしましたが、呼び出されません。これを達成する方法はありますか。それがチェーンのエンディングであることを知る方法。Kendo UIの仕組みが気に入っています 。

ありがとう、
ピーター

4

2 に答える 2

4

クラスはインターフェースUIElementを実装する必要がありIHtmlStringます。このインターフェイスのToHtmlStringメソッドは Razor によって呼び出され、HTML エンコードされた文字列を返す必要があります。

したがって、これを抽象ベースに実装し、具象などのクラスで実装できるメソッドをUIElement作成します。RenderHtmlLinkButton

public abstract class UIElement : IHtmlString 
{
    public string ToHtmlString()
    {
        return RenderHtml(); // This should return an HTML-encoded string.
    }

    public override string ToString()
    {
        return ToHtmlString();
    }

    protected abstract string RenderHtml();
}

クラスの Reflector/JustDecompile/dotPeek で KendoUI をWidgetBase確認すると、同じパターンが表示されます。

于 2013-04-21T06:27:16.503 に答える
0

この特定の状況では試していませんが、暗黙のキャストを使用して流暢なビルダーから必要なオブジェクトに変換できる可能性があります (このブログを参照)。

于 2013-04-21T05:51:26.050 に答える