我们有这个StartUp
如下,从appsettings.json
获取值:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
var environment = Configuration["ApplicationSettings:Environment"];
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(Configuration.GetSection("ApplicationSettings"));
...
}
我们也将模型称为AppSettings
public class AppSettings
{
public string Environment { get; set; }
public string Version { get; set; }
}
在我尝试/Pages/Shared/_Layout.cshtml
并将此版本注入此共享页面时,我无法执行方法背后的代码。那么如何注入呢?
更新1-
理论上,如果它是页面模型,我可以这样做:
public class _LayoutModel : PageModel
{
private readonly AppSettings _appSettings;
public string Version;
public string Environment;
public _LayoutModel(IOptions<AppSettings> appsettings)
{
_appSettings = appsettings.Value;
}
public void OnGet()
{
Environment = _appSettings.Environment;
Version = _appSettings.Version;
}
}
答案 0 :(得分:2)
您可以使用_layout.cshtml文件中的ViewData访问设置。
在_layout.cshtml文件中
<title>Version : @ViewData["Version"] | Environment : @ViewData["Environment"]</title>
但是您必须像这样共享此布局的所有页面的.cshtml文件中设置ViewData的值
@model YourPageModel
@{
ViewData["Environment"] = Model.Environment;
ViewData["Version"] = Model.Version;
Layout = "/Pages/Shared/_Layout.cshtml";
}
希望这会有所帮助:)
答案 1 :(得分:2)
就像在Controller中一样,您也可以将服务注入视图。
您可以像这样使用@inject
:
@inject Microsoft.Extensions.Options.IOptions<AppSettings> AppSettingsOptions
或将@using Microsoft.Extensions.Options
添加到_ViewImports.cs,然后按以下方式在您的布局中插入选项:
@inject IOptions<AppSettings> AppSettingsOptions
。
之后,您可以访问诸如@AppSettingsOptions.Value.Version
之类的设置。
答案 2 :(得分:1)
为核心3.1添加了Hameed的答案:
AppSettings.Json:
@MockBean
RequestInterceptor interceptor; // I NEED THIS
@BeforeEach
public void initTest() throws Exception {
Mockito.when(interceptor.preHandle(any(), any(), any())).thenReturn(true); // AND THIS
}
_ViewImports.cshtml:
{ "Company": {"Name": "EvilCorp"}}
_Layout.cshtml:
@using Microsoft.Extensions.Configuration
在Razor html中:
@inject IConfiguration _config