我有一个简单的标签生成器,如下所示:
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));
}
而且,我可以这样使用它:
@Html.Tag("em", Model.Title)
产生:
<em>The Title</em>
如何编写它以使用Fluent语法,因此它的用法如下所示:
@Html.Tag("em").Content(Model.Title)
您必须定义一个构建器接口和实现。我希望我的示例可以提供一些指导:
public static class MyHtmlExtensions
{
public static IMyTagBuilder Tag(this HtmlHelper helper, string tag)
{
return new MyTagBuilder(tag);
}
}
然后定义构建器接口和实现:
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);
}
}
由于是IMyTagBuilder
Implements IHtmlString
,因此可以在.Content()
以后调用或不调用的情况下使用。
一个伟大的把戏实现流畅的接口可使用时,使用IFluentInterface
隐藏对象成员(ToString
,Equals
,GetHashCode
以及GetType
来自智能感知),它会删除一些噪音。
编辑:Daniel Cazzulino的构建Funq API的绝佳资源是在此处构建Funq的截屏视频
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句