我有一个注入" _ViewImports"
的ConfigurationService类@inject IConfigurationService ConfigurationService
并按照以下方式访问每个View页面:
@{
// Configurations
var configuration = await ConfigurationService.GetGeneralConfiguration();
var currencySymbol = configuration.Currency.Symbol;
}
这样可行,但每个页面我都要复制并粘贴代码。我已经尝试在_Layout.cshtml
中编写代码但不起作用。静态变量也不起作用,因为值不是静态的,每个请求我都获得当前用户配置并注入页面。所有需要currencySymbol
变量值的页面我需要粘贴代码,我不想要这个。
我的问题是:如何在(例如_Layout.cshtml
或_ViewStart.cshtml
或其他变量中声明变量,这些变量可以被所有剃刀视图页面(如继承)访问。此变量必须包含ConfigurationService值。
抱歉我的英文。
答案 0 :(得分:2)
除了创建变量之外,您最好注入一个能够根据需要生成所需值的服务。例如:
CREATE INDEX era_ac_range_idx ON era_ac USING GIST (era_ac_range);
现在注入新服务:
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 ILocalisationService LocalisationService
这样做的好处是,当您的视图没有使用其中一个值时,它不需要计算,如果需要很长时间,这尤其相关。