Aspnetcore: كيف أقوم بحقن خيارات في العرض؟

تم إنشاؤها على ١١ سبتمبر ٢٠١٥  ·  3تعليقات  ·  مصدر: dotnet/aspnetcore

لدي نقطة نهاية Azure CDN قادمة من التكوين الذي أحاول الاحتفاظ به في الخيارات وإدخالها في طرق العرض حيث سيتم استخدامها. أنا عالق ... لا تعرض مستندات .NET رمز الترميز لإدخال خيارات العرض ولا يبدو أن منشور Rick قد تم تحديثه لـ beta7. أنا على dnx-coreclr-win-x64.1.0.0-beta7 ، وهذا تطبيق dnxcore50.

نموذج

(محتار بشأن أفضل الممارسات هنا: هل ينطبق هذا أيضًا على النماذج؟)

ج #
مساحة الاسم MyApp.Models
{
فئة عامة AppOptions
{
سلسلة عامة CDN {get؛ تعيين؛ }
}
}

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

HomeController

ج #
فئة عامة HomeController: Controller
{
HomeController العامة (IOptionsخيارات
{
خيارات = 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>
...

... نفس النتيجة إذا استخدمت <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">

pranavkm آه! مسكتك. شكرا.

لأي شخص آخر ، تذكر أنه يجب عليك تأهيل الواجهة بالكامل للحقن.

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات