我有一个注入(inject)“_ViewImports”的 ConfigurationService 类
@inject IConfigurationService ConfigurationService
并在每个 View 页面访问它,如下所示:
@{
// Configurations
var configuration = await ConfigurationService.GetGeneralConfiguration();
var currencySymbol = configuration.Currency.Symbol;
}
这有效,但我必须复制和粘贴每个页面的代码。我尝试在
_Layout.cshtml
中编写代码但不起作用。静态变量也不起作用,因为值不是静态的,每个请求我都会获取当前用户配置并注入(inject)页面。所有需要 currencySymbol
变量值的页面我都需要粘贴代码,我不想要这个。我的问题是:我如何声明变量,例如
_Layout.cshtml
或 _ViewStart.cshtml
或其他可以被所有 Razor View 页面访问的变量,如继承。此变量必须包含 ConfigurationService 值。对不起我的英语不好。
最佳答案
与其创建变量,不如注入(inject)一个可以根据需要生成所需值的服务。例如:
public interface ILocalisationService
{
string CurrencySymbol { get; }
}
public class LocalisationService : ILocalisationService
{
private IConfigurationService _configurationService;
private string _currencySymbol;
public LocalisationService(IConfigurationService configurationService)
{
_configurationService = configurationService;
}
public string CurrencySymbol => string.IsNullOrEmpty(_currencySymbol)
? _currencySymbol = _configurationService.GetValue("£")
: _currencySymbol;
}
现在注入(inject)新服务:
@inject ILocalisationService LocalisationService
并在您的 View 中使用它:
The currency symbol is @LocalisationService.CurrencySymbol
这样做的好处是,当您的 View 不使用其中一个值时,它不需要计算,如果需要很长时间,这一点尤其重要。
关于c# - 在 ASP.NET MVC 中声明全局 Razor Page 变量 [非静态],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47857068/