Gre*_*Gum 4 asp.net-mvc html-helper fluent
我有一个简单的标记构建器,如下所示:
public static MvcHtmlString Tag(this HtmlHelper helper, string tag, string content)
{
var tagBuilder = new TagBuilder(tag){InnerHtml = content};
return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.NormalTag));
}
Run Code Online (Sandbox Code Playgroud)
而且,我可以像这样使用它:
@Html.Tag("em", Model.Title)
Run Code Online (Sandbox Code Playgroud)
产生:
<em>The Title</em>
Run Code Online (Sandbox Code Playgroud)
如何编写它来使用Fluent语法,因此它的用法如下所示:
@Html.Tag("em").Content(Model.Title)
Run Code Online (Sandbox Code Playgroud)
khe*_*ang 11
您必须定义构建器接口和实现.我希望我的例子可以提供一些指导:
public static class MyHtmlExtensions
{
public static IMyTagBuilder Tag(this HtmlHelper helper, string tag)
{
return new MyTagBuilder(tag);
}
}
Run Code Online (Sandbox Code Playgroud)
然后定义构建器界面和实现:
public interface IMyTagBuilder : IHtmlString
{
IHtmlString Content(string content);
}
public class MyTagBuilder : IMyTagBuilder
{
private readonly TagBuilder _tagBuilder;
public MyTagBuilder(string tag)
{
_tagBuilder = new TagBuilder(tag);
}
public IHtmlString Content(string content)
{
_tagBuilder.InnerHtml = content;
return this;
}
public string ToHtmlString()
{
return _tagBuilder.ToString(TagRenderMode.NormalTag);
}
}
Run Code Online (Sandbox Code Playgroud)
自IMyTagBuilder实现以来IHtmlString,它可以在之后使用或不使用时使用.Content().
一个伟大的把戏实现流畅的接口可使用时,使用IFluentInterface隐藏对象成员(ToString,Equals,GetHashCode以及GetType来自智能感知),它会删除一些噪音.
编辑:建立流畅API的一个很好的资源是Daniel Cazzulino 在这里建立Funq的截屏视频
| 归档时间: |
|
| 查看次数: |
1700 次 |
| 最近记录: |