C# .NET Core 2.0中的HtmlHelper,并在其中注入应用设置

C# .NET Core 2.0中的HtmlHelper,并在其中注入应用设置,c#,asp.net-core,razor,C#,Asp.net Core,Razor,我可能走到了死胡同,所以我希望有人能告诉我“回头!”或“继续”——我正在尝试将一个HTML帮助程序从ASP.NET 5应用程序转换为.NET Core 2.0应用程序。在扩展类中调用帮助程序时,我遇到了麻烦。首先,我了解到.NET Core使用DI将appsettings获取到单独的类中,因此我使用DI设置扩展类: private readonly AppSettings _appsettings; public HtmlHelperExtensions2(IOptions<AppSet

我可能走到了死胡同,所以我希望有人能告诉我“回头!”或“继续”——我正在尝试将一个HTML帮助程序从ASP.NET 5应用程序转换为.NET Core 2.0应用程序。在扩展类中调用帮助程序时,我遇到了麻烦。首先,我了解到.NET Core使用DI将appsettings获取到单独的类中,因此我使用DI设置扩展类:

private readonly AppSettings _appsettings;

public HtmlHelperExtensions2(IOptions<AppSettings> appSettings)
{
    _appsettings = appSettings.Value;
}
否则我会得到一个编译错误。但是如果没有“this”引用,调用将需要一个新的HtmlHelper


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

您可以从
HtmlHelper
的实例访问请求的
IServiceProvider
,并使用从DI容器解析实例。举个例子(这有点“火车失事”):

var-appSettings=htmlHelper.ViewContext.HttpContext.RequestServices
.GetRequiredService
public void HelpPanel(HtmlHelper htmlHelper, string thingId, string language)
{ }
var appSettings = htmlHelper.ViewContext.HttpContext.RequestServices
    .GetRequiredService<IOptions<AppSettings>>()
    .Value;