Мне надо вам кое в чём признаться про validlyВ своём докладе на Ozon E-Code я утверждал, что validly поддерживает внедрение сервисов из DI, и приводил примерно такой кусок кода:
[Validatable]
public partial record CreateObjectRequest
{
[CustomValidation]
public string? IntegrationField { get; set; }
public async IAsyncEnumerable<ValidationMessage> ValidateIntegrationField(
IExternalService externalService,
[EnumeratorCancellation] CancellationToken ct = default)
{
if (IntegrationField is null)
yield break;
var isValid = await externalService.IsValidValue(IntegrationField, ct);
if (!isValid)
yield return new ValidationMessage("Integration field is invalid", "External.Integration");
}
}
public interface IExternalService
{
Task<bool> IsValidValue(string integrationField, CancellationToken ct = default);
}
На самом деле это почти так. Генератор действительно понимает зависимости и пытается их достать через
IServiceProvider. Но автор генерировал неправильный код из-за чего возникала ошибка сборки. А также пытался извлечь
CancellationToken как сервис!
К счастью, исправления от меня уже в мастере, но релиз до сих пор затягивается. Так что ждём!
Пока можете посмотреть PR с исправлениями -
https://github.com/Hookyns/validly/pull/13Или присоединиться в закрытый канал
ШарпиZм, оформив подписку по ссылке в закрепе ☝️
Там вас ждёт гайд по подготовке к новому режиму сборки мусора при переходе на .NET 9 и .NET 10