Aspnetcore: рдореИрдВ рджреГрд╢реНрдп рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдХреИрд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реВрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рд╕рд┐рддре░ 2015  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dotnet/aspnetcore

рдореЗрд░реЗ рдкрд╛рд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдПрдЬрд╝реВрд░ рд╕реАрдбреАрдПрди рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЙрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВ ... .NET рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╡рд┐рдХрд▓реНрдк рдЗрдВрдЬреЗрдХреНрд╢рди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрдЕрдк рдХреЛрдб рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдФрд░ рд░рд┐рдХ рдХреА рдкреЛрд╕реНрдЯ рдмреАрдЯрд╛ 7 рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИред рдореИрдВ dnx-coreclr-win-x64.1.0.0-beta7 рдкрд░ рд╣реВрдВ, рдФрд░ рдпрд╣ рдПрдХ dnxcore50 рдРрдк рд╣реИред

рдирдореВрдирд╛

(рдпрд╣рд╛рдВ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдкрд░ рдЙрд▓рдЭрди рдореЗрдВ: рдХреНрдпрд╛ рдпрд╣ рдореЙрдбрд▓ рдореЗрдВ рднреА рдЬрд╛рддрд╛ рд╣реИ?)

``` рд╕реА#
рдирд╛рдо рд╕реНрдерд╛рди MyApp.Models
{
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдРрдкрдСрдкреНрд╢рдиреНрд╕
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реАрдбреАрдПрди {рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ; рд╕рдореВрд╣; }
}
}

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

рд╣реЛрдордирд┐рдпрдВрддреНрд░рдХ

``` рд╕реА#
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рд╣реЛрдордХрдВрдЯреНрд░реЛрд▓рд░: рдХрдВрдЯреНрд░реЛрд▓рд░
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛрдордХрдВрдЯреНрд░реЛрд▓рд░(IOptionsрд╡рд┐рдХрд▓реНрдк рдПрдХреНрд╕реЗрд╕рд░)
{
рд╡рд┐рдХрд▓реНрдк = рд╡рд┐рдХрд▓реНрдк рдПрдХреНрд╕реЗрд╕рд░ред рд╡рд┐рдХрд▓реНрдк;
}

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>
...

... рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рдЕрдЧрд░ рдореИрдВ <strong i="37">@model</strong> MyApp.Models.AppOptions рдФрд░ @{Model.CDN}.vo... рдпрд╛ @Model.CDN.vo... рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

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

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЪреВрдВрдХрд┐ IOptions DI рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ <strong i="6">@inject</strong> IOptions<AppOptions> AppOptionsAccessor рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА

рд░реЗрдЬрд░ рд╕реНрдХреНрд╡реАрдЧрд▓реНрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧрд▓рдд рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

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

@ рдкреНрд░рдгрд╡рдХрдо рдЖрд╣! рдЧреЛрдЪрд╛ред рдзрдиреНрдпрд╡рд╛рджред

рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

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

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

FourLeafClover picture FourLeafClover  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ermithun picture ermithun  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rbanks54 picture rbanks54  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

UweKeim picture UweKeim  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

farhadibehnam picture farhadibehnam  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ