| File: Internal\ContextualOptions.cs | Web Access |
| Project: src\src\Libraries\Microsoft.Extensions.Options.Contextual\Microsoft.Extensions.Options.Contextual.csproj (Microsoft.Extensions.Options.Contextual) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Threading; using System.Threading.Tasks; using Microsoft.Shared.Diagnostics; namespace Microsoft.Extensions.Options.Contextual.Internal; /// <summary> /// Used to retrieve configured TOptions instances based on a context. /// </summary> /// <typeparam name="TOptions">The type of options being requested.</typeparam> /// <typeparam name="TContext">A type defining the context for this request.</typeparam> internal sealed class ContextualOptions<TOptions, TContext> : INamedContextualOptions<TOptions, TContext> where TOptions : class where TContext : notnull, IOptionsContext { private readonly IContextualOptionsFactory<TOptions> _factory; /// <summary> /// Initializes a new instance of the <see cref="ContextualOptions{TOptions, TContext}"/> class. /// </summary> /// <param name="factory">The factory to create instances of <typeparamref name="TOptions"/> with.</param> public ContextualOptions(IContextualOptionsFactory<TOptions> factory) { _factory = factory; } /// <inheritdoc/> public ValueTask<TOptions> GetAsync(in TContext context, CancellationToken cancellationToken) => GetAsync(Options.DefaultName, context, cancellationToken); /// <inheritdoc/> public ValueTask<TOptions> GetAsync(string name, in TContext context, CancellationToken cancellationToken) => _factory.CreateAsync(Throw.IfNull(name), context, cancellationToken); }