Nous avons ce StartUp comme suit qui récupère les valeurs de appsettings.json:
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;
}
}
Et nous avons également un modèle appelé AppSettings
public class AppSettings
{
public string Environment { get; set; }
public string Version { get; set; }
}
Alors que je travaille sur /Pages/Shared/_Layout.cshtml , j'essaie d'injecter cette version dans cette page partagée, je ne pouvais pas faire le code derrière l'approche. Comment injecter ça alors?
MISES À JOUR 1 -
En théorie, je pourrais faire comme ça s'il s'agit d'un modèle de page:
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"));
...
}
3 Réponses :
vous pouvez accéder à vos paramètres en utilisant ViewData dans votre fichier _layout.cshtml.
Dans votre fichier _layout.cshtml
@model YourPageModel
@{
ViewData["Environment"] = Model.Environment;
ViewData["Version"] = Model.Version;
Layout = "/Pages/Shared/_Layout.cshtml";
}
Mais vous devez définir la valeur de ViewData dans le fichier .cshtml de toutes les pages, vous partagez cette mise en page comme ceci
<title>Version : @ViewData["Version"] | Environment : @ViewData["Environment"]</title>
J'espère que cela vous aidera :)
Comme dans le contrôleur, vous pouvez également injecter vos services dans la vue.
Vous pouvez utiliser @inject comme ceci:
@inject Microsoft.Extensions.Options.IOptions
ou ajoutez @using Microsoft.Extensions.Options à _ViewImports.cs, puis injectez les options dans votre mise en page comme ceci:
@inject IOptions .
après cela, vous pouvez accéder à vos paramètres tels que: @ AppSettingsOptions.Value.Version .
Ajout à la réponse de Hameed, pour Core 3.1:
AppSettings.Json:
{"Entreprise": {"Name": "EvilCorp"}}
_ViewImports.cshtml:
@using Microsoft.Extensions.Configuration
_Layout.cshtml:
@inject IConfiguration _config
dans le html Razor:
@_config["Compagnie:Nom"