繁体   English   中英

.NET Core 2.0 中的 HtmlHelper,其中注入了 appsettings

[英]HtmlHelper in .NET Core 2.0 with appsettings being injected in

我可能走上了一条死胡同,所以我希望有人可以告诉我“转身”。 或“继续前进”。 - I'm attempting to convert an HTML helper from an ASP.NET 5 app into a .NET Core 2.0 app, I ran into trouble when calling the helper in an extension class, First: I read that .NET Core uses DI for getting appsettings into separate classes ,所以我用DI设置了扩展class:

private readonly AppSettings _appsettings;

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

而且我能够从 appSettings.json 返回项目。 问题是,要使用 DI,我需要从 class 签名中删除“静态”引用,因此我还必须从帮助调用中删除“this”引用:

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

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

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

您可以从HtmlHelper实例访问请求的IServiceProvider并使用Service Locator 模式从 DI 容器中解析实例。 举个例子(这有点像“火车残骸”):

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM