Aspnetcore: Bagaimana cara menyuntikkan Opsi ke dalam Tampilan?

Dibuat pada 11 Sep 2015  ·  3Komentar  ·  Sumber: dotnet/aspnetcore

Saya memiliki titik akhir Azure CDN yang berasal dari Konfigurasi yang saya coba pegang di Opsi dan disuntikkan ke tampilan di mana itu akan digunakan. Saya buntu ... dokumen .NET tidak menunjukkan kode markup untuk injeksi opsi tampilan dan posting Rick tampaknya tidak diperbarui untuk beta7. Saya menggunakan dnx-coreclr-win-x64.1.0.0-beta7, dan ini adalah aplikasi dnxcore50.

Model

(Bingung dengan praktik terbaik di sini: Apakah ini bahkan masuk Model?)

``` c#
namespace MyApp.Models
{
AppOptions kelas publik
{
CDN string publik { dapatkan; mengatur; }
}
}

#### 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();
    }
}

RumahKontroler

``` c#
HomeController kelas publik : Pengontrol
{
HomeController publik (IOptionspilihanAksesor)
{
Pilihan = 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>
...

... hasil yang sama jika saya menggunakan <strong i="37">@model</strong> MyApp.Models.AppOptions dan @{Model.CDN}.vo... atau @Model.CDN.vo... .

Komentar yang paling membantu

Untuk orang lain, ingat Anda harus memenuhi syarat antarmuka untuk disuntikkan.

<strong i="6">@inject</strong> Microsoft.Extensions.Options.IOptions<AppOptions> AppOptionsAccessor

Semua 3 komentar

Karena IOptions adalah yang ada di wadah DI, Anda perlu <strong i="6">@inject</strong> IOptions<AppOptions> AppOptionsAccessor

Untuk coretan Razor, apakah masalah Anda menggunakan tanda kurung yang salah:

<img src="http://@(AppOptionsAccessor.Options.CDN).vo.msecnd.net/container/image.png" alt="Image from CDN">

@pranavkm Ah! Kena kau. Terima kasih.

Untuk orang lain, ingat Anda harus memenuhi syarat antarmuka untuk disuntikkan.

<strong i="6">@inject</strong> Microsoft.Extensions.Options.IOptions<AppOptions> AppOptionsAccessor

Apakah halaman ini membantu?
0 / 5 - 0 peringkat