.NET Core 2.0中的HtmlHelper,并在其中注入了应用程序设置

我可能走上了一条死路,所以我希望有人可以告诉我“转身!”或“继续前进!” -我正在尝试将HTML帮助程序从ASP.NET 5应用程序转换为.NET Core 2.0应用程序。在扩展类中调用帮助程序时遇到麻烦。首先,我读到.NET Core使用DI将应用程序设置分为单独的类,因此我使用DI设置了扩展类:

private readonly AppSettings _appsettings;

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

我可以从appSettings.json返回项目。问题是要使用DI,我需要从类签名中删除“静态”引用,因此我还必须从帮助程序调用中删除“ this”引用:

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

否则,我得到一个编译错误。但是,如果没有“ this”引用,该调用将需要一个新的HtmlHelper。

因此,我实际上想克服这一点。这是正确的道路还是我在这里走不通?除了HtmlHelpers,我是否还需要在Core中使用其他内容?我无法确定Core是否支持它们。

dagula6 回答:.NET Core 2.0中的HtmlHelper,并在其中注入了应用程序设置

您可以从IServiceProvider的实例访问请求的HtmlHelper,并使用Service Locator anti-pattern来解析DI容器中的实例。以自己为例(有点“火车残骸”):

var appSettings = htmlHelper.ViewContext.HttpContext.RequestServices
    .GetRequiredService<IOptions<AppSettings>>()
    .Value;

免责声明:静态和服务定位器模式有些争议。 Tag Helpers不使用静态变量,也不支持依赖注入,因此,如果时间合适,您可能要考虑切换到其中之一。

本文链接:https://www.f2er.com/3165575.html

大家都在问