// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
#nullable enable
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders;
/// <summary>
/// An <see cref="IModelBinderProvider"/> for <see cref="CancellationToken"/>.
/// </summary>
public class CancellationTokenModelBinderProvider : IModelBinderProvider
{
// CancellationTokenModelBinder does not have any state. Re-use the same instance for binding.
private readonly CancellationTokenModelBinder _modelBinder = new();
/// <inheritdoc />
public IModelBinder? GetBinder(ModelBinderProviderContext context)
{
ArgumentNullException.ThrowIfNull(context);
if (context.Metadata.ModelType == typeof(CancellationToken))
{
return _modelBinder;
}
return null;
}
}
/// <summary>
/// <see cref="IModelBinder"/> implementation to bind models of type <see cref="CancellationToken"/>.
/// </summary>
public class CancellationTokenModelBinder : IModelBinder
{
/// <inheritdoc />
public Task BindModelAsync(ModelBindingContext bindingContext)
{
ArgumentNullException.ThrowIfNull(bindingContext);
// We need to force boxing now, so we can insert the same reference to the boxed CancellationToken
// in both the ValidationState and ModelBindingResult.
//
// DO NOT simplify this code by removing the cast.
var model = (object)bindingContext.HttpContext.RequestAborted;
bindingContext.ValidationState.Add(model, new ValidationStateEntry() { SuppressValidation = true });
bindingContext.Result = ModelBindingResult.Success(model);
return Task.CompletedTask;
}
}
Насчет возможности получения CancellationToken через параметр метода действия за счет привязки к модели меня терзают смутные сомнения.
Бывают перестановки до 3-5 раз за рабочий день для одного сотрудника.
Только я уже работаю мидлом более пяти лет и ведущим разрабом работал. и тимлидом. и успешно поднимал проекты и готовил кадры.
Получаем ограничение: система обязана иметь интерфейс Excel ( Libre Office ) или аналогов, что-бы новенький сотрудник сразуже начал выполнять рабочие задачи.
если бы такой рейтинг был - никто бы не использовал ничего, кроме того, что на первом месте.
Если менеджменту нужна информация в человеко-часах - значит это уже какой-то проект.
А раз проект - значит есть таск трекер.
А раз есть таск трекер - значит можно в нём указать присутствие сотрудника в какие-то дни. А может можно даже прямо в нём написать его расписание.
Научите сотрудников сортировать почту.
Раз есть корпоративный месенджер - значит можно через API всё нужно там прокинуть.
Можно хоть бота сделать, которому можно задать вопрос о графике.
Просто отправлять excel-табличку на почту или в месенджер через бота в это время.
Начальников скорее всего сильно меньше чем 50 - значит проблем с редактированием таблицы не должно возникнуть.
Чтобы сотрудники не теряли письмо - пусть они заранее знают, что в это время им должен график приходить, с которым они должны ознакомиться.
Опять же научить их сортировать почту.