gpt4 book ai didi

c# - 我的扩展方法没有注册

转载 作者:行者123 更新时间:2023-11-30 13:34:18 25 4
gpt4 key购买 nike

我正在阅读 Pro ASP.Net MVC2 这本书,实际上 90% 的内容对我来说都是新的。我觉得自己像个糖果店里的 child ! :)

单元测试、依赖注入(inject)和其他东西对于我创建的典型 CRUD 应用程序来说真的很新而且很陌生。

现在我遇到了书中要求我们设计的测试的问题。

[Test]
public void Can_Generate_Links_To_Other_Pages()
{
// Arrange: We're going to extend the HtmlHelper class.
// It doesn't matter if the variable we use is null.
HtmlHelper html = null;

// Arrange: The helper should take a PagingInfo instance (that's
// a class we haven't yet defined) and a lambda to specify the URLs
PagingInfo pagingInfo = new PagingInfo
{
CurrentPage = 2,
TotalItems = 28,
ItemsPerPage = 10
};

Func<int, string> pageUrl = i => "Page" + i;

// Act
MvcHtmlString result = html.PageLinks(pagingInfo, pageUrl);

// Assert: Here's how it should format the links
result.ToString().ShouldEqual(@"<a href=""Page1"">1</a>
<a class=""selected"" href=""Page2"">2</a>
<a href=""Page3"">3</a>");
}

我的 html 变量是一个 HtmlHelper 变量。似乎未正确注册扩展方法 PageLinks()。

我应该在哪里检查这个?我意识到这个问题可能有点含糊,但任何帮助都会很棒。

编辑:

显然这是我注册扩展方法的地方。虽然它似乎没有扩展任何东西。至少当我在上面的代码中键入它时,intellisnse 不会显示它。

public static class PagingHelpers
{
public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func<int, string> pageUrl)
{
StringBuilder result = new StringBuilder();

for (int i = 1; i <= pagingInfo.TotalPages; i++)
{
TagBuilder tag = new TagBuilder("a"); // Construct an <a> tag
tag.MergeAttribute("href", pageUrl(i));
tag.InnerHtml = i.ToString();
if (i == pagingInfo.CurrentPage)
tag.AddCssClass("selected");
result.AppendLine(tag.ToString());
}

return MvcHtmlString.Create(result.ToString());
}
}

另外,有人能告诉我如何设置 Visual Studio 以便它只复制纯文本而没有可笑的缩进吗?

编辑 2:糟糕!忘记输入错误:

Error 1 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'PageLinks' and no extension method 'PageLinks' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?) C:\Users\Sergio\documents\visual studio 2010\Projects\SportsStore\SportsStore.UnitTests\DisplayingPageLinks.cs 35 41 SportsStore.UnitTests

最佳答案

要使用扩展方法,您需要包含扩展方法类所在的命名空间。您还需要确保扩展方法类是静态的并且可供使用代码访问(例如,如果它在另一个程序集中,则不能是内部的)。最后,一定不要忘记要扩展的类型上的 this 关键字。如果所有这些都准备就绪,您应该不会遇到任何问题。

关于c# - 我的扩展方法没有注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3432207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com