Можно ли определить среду размещения ASP.NET Core с помощью вспомогательного метода HTML? - PullRequest
1 голос
/ 27 сентября 2019

Я пишу вспомогательный метод HTML в ASP.NET Core и хочу определить текущую среду размещения.Данным способом сделать это является использование 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?

1 Ответ

1 голос
/ 27 сентября 2019

IHtmlHelper имеет свойство ViewContext, которое само по себе имеет свойство HttpContext.При этом вы можете использовать GetRequiredService, чтобы получить IHostingEnvironment.Вот пример:

htmlHelper.ViewContext.HttpContext.RequestServices.GetRequiredService<IHostingEnvironment>();

Это не DI: он использует шаблон Service Locator, который часто называют antipattern .Если вы хотите использовать DI, рассмотрите возможность создания Tag Helper вместо метода расширения IHtmlHelper.Это также уменьшит необходимость вложения всех этих вызовов доступа к свойству.

...