在.NET Core 2.0中使用HtmlHelper并注入appsettings

3

我可能走上了一条死路,所以我希望有人能告诉我“掉头!”或“继续前进!”- 我正在尝试将一个ASP.NET 5应用程序中的HTML助手转换为.NET Core 2.0应用程序。 当我在扩展类中调用助手时遇到了问题。 首先,我读到.NET Core使用DI将appsettings传递给不同类,因此我设置了带有DI的扩展类:

private readonly AppSettings _appsettings;

public HtmlHelperExtensions2(IOptions<AppSettings> appSettings)
{
    _appsettings = appSettings.Value;
}

我可以从appSettings.json返回项。问题在于,为了使用DI,我需要从类签名中删除"static"引用,因此我也必须从助手调用中删除"this"引用:

public void HelpPanel(HtmlHelper htmlHelper, string thingId, string language)
{ }

否则我会收到编译错误。但是没有“this”引用,调用将期望一个新的HtmlHelper。

所以我正在努力克服这个问题,如果我实际上可以克服它。这是正确的路径还是我走上了死胡同?除了HtmlHelpers之外,我需要在Core中使用其他东西吗?我无法确定它们是否受到Core的支持。

1个回答

4
您可以通过 HtmlHelper 实例访问请求的 IServiceProvider,并使用服务定位器 模式从 DI 容器中解析实例。下面是一个示例(有点混乱):
var appSettings = htmlHelper.ViewContext.HttpContext.RequestServices
    .GetRequiredService<IOptions<AppSettings>>()
    .Value;

免责声明:静态类和服务定位器模式有一定争议。如果/当时机成熟时,您可能想考虑切换到标签助手,因为它们不使用静态类并支持依赖注入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接