J'ai un point de terminaison Azure CDN provenant de Configuration que j'essaie de conserver dans Options et d'injecter dans les vues où il sera utilisé. Je suis bloqué ... la documentation .NET n'affiche pas le code de balisage pour l'injection d'options d'affichage et le message de Rick ne semble pas être mis à jour pour beta7. Je suis sur dnx-coreclr-win-x64.1.0.0-beta7, et c'est une application dnxcore50.
(Confus sur les meilleures pratiques ici : est-ce que cela va même dans les modèles ?)
``` c#
espace de noms MyApp.Models
{
classe publique AppOptions
{
chaîne publique CDN { obtenir ; ensemble; }
}
}
#### Startup
``` c#
public class Startup
{
public IConfiguration Configuration { get; set; }
public Startup(IHostingEnvironment env)
{
var configurationBuilder = new ConfigurationBuilder().AddEnvironmentVariables();
Configuration = configurationBuilder.Build();
Configuration["CDN"] = "az123456";
}
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.Configure<AppOptions>(Configuration);
services.AddSingleton(_ => Configuration);
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseErrorPage();
app.UseBrowserLink();
}
else
{
app.UseErrorHandler("/error");
}
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
}
}
``` c#
classe publique HomeController : Contrôleur
{
public HomeController(IOptions
{
Options = optionsAccessor.Options ;
}
AppOptions Options { get; }
[Route("/error")]
public IActionResult Script() => File("/wwwroot/error.htm", "text/html");
[HttpGet]
public IActionResult Index()
{
return View("index", Options);
}
}
#### Markup
If everything else above is ok, the markup part is unclear to me. How do I inject this?
- as a model with `<strong i="32">@model</strong> MyApp.Models.AppOptions`
- with inject `<strong i="33">@inject</strong> MyApp.Models.AppOptions AppOptions`
- is the problem with the reference in the `src=` ... how do I break the property lookup at the "CDN" before the period prior to "vo"?
``` html
<strong i="34">@inject</strong> MyApp.Models.AppOptions AppOptions
...
<body>
<!-- Error (squiggles) on "AppOptions" and complains it can't be found -->
<img src="http://@{AppOptions.CDN}.vo.msecnd.net/container/image.png" alt="Image from CDN">
<!-- Error (squiggles) on "vo" and complains its trying to lookup "vo" on the property -->
<img src="http://@AppOptions.CDN.vo.msecnd.net/container/image.png" alt="Image from CDN">
</body>
...
... même résultat si j'utilise <strong i="37">@model</strong> MyApp.Models.AppOptions
et @{Model.CDN}.vo...
ou @Model.CDN.vo...
.
Étant donné que IOptions
est celui qui se trouve dans le conteneur DI, vous devez <strong i="6">@inject</strong> IOptions<AppOptions> AppOptionsAccessor
Pour les gribouillis Razor, le problème est que vous utilisez les mauvaises parenthèses :
<img src="http://@(AppOptionsAccessor.Options.CDN).vo.msecnd.net/container/image.png" alt="Image from CDN">
@pranavkm Ah ! Je t'ai eu. Merci.
Pour tous les autres, rappelez-vous que vous devez entièrement qualifier l'interface à injecter.
<strong i="6">@inject</strong> Microsoft.Extensions.Options.IOptions<AppOptions> AppOptionsAccessor
Commentaire le plus utile
Pour tous les autres, rappelez-vous que vous devez entièrement qualifier l'interface à injecter.
<strong i="6">@inject</strong> Microsoft.Extensions.Options.IOptions<AppOptions> AppOptionsAccessor