是否可以在 HTML 辅助方法中确定 ASP.NET 核心托管环境?
Is it possible to determine the ASP.NET Core hosting environment in an HTML helper method?
我正在 ASP.NET Core 中编写一个 HTML 辅助方法,我想检测当前的托管环境。给定的方法是使用 DI,例如:
public class MyClass {
private readonly IHostingEnvironment _hostingEnvironment;
public MyClass(IHostingEnvironment hostingEnvironment) {
_hostingEnvironment = hostingEnvironment;
}
public void Xyzzy() {
var environment = _hostingEnvironment.EnvironmentName;
[...]
}
}
但是 HTML 辅助方法是扩展方法,因此必须是静态的,因此不能使用 DI。我似乎在 IHtmlHelper
对象中看不到任何告诉我当前托管环境的信息;如何从我的 HTML 辅助方法中找到它?
IHtmlHelper
有一个 ViewContext
property, which itself has a HttpContext
property. With this, you can use GetRequiredService
得到 IHostingEnvironment
。这是一个例子:
htmlHelper.ViewContext.HttpContext.RequestServices
.GetRequiredService<IHostingEnvironment>();
这不是 DI:它使用服务定位器模式,通常称为 antipattern. If you want to use DI, consider creating a Tag Helper 而不是 IHtmlHelper
扩展方法。这也将减少嵌套所有这些 属性 访问调用的需要。
我正在 ASP.NET Core 中编写一个 HTML 辅助方法,我想检测当前的托管环境。给定的方法是使用 DI,例如:
public class MyClass {
private readonly IHostingEnvironment _hostingEnvironment;
public MyClass(IHostingEnvironment hostingEnvironment) {
_hostingEnvironment = hostingEnvironment;
}
public void Xyzzy() {
var environment = _hostingEnvironment.EnvironmentName;
[...]
}
}
但是 HTML 辅助方法是扩展方法,因此必须是静态的,因此不能使用 DI。我似乎在 IHtmlHelper
对象中看不到任何告诉我当前托管环境的信息;如何从我的 HTML 辅助方法中找到它?
IHtmlHelper
有一个 ViewContext
property, which itself has a HttpContext
property. With this, you can use GetRequiredService
得到 IHostingEnvironment
。这是一个例子:
htmlHelper.ViewContext.HttpContext.RequestServices
.GetRequiredService<IHostingEnvironment>();
这不是 DI:它使用服务定位器模式,通常称为 antipattern. If you want to use DI, consider creating a Tag Helper 而不是 IHtmlHelper
扩展方法。这也将减少嵌套所有这些 属性 访问调用的需要。