15просмотров
9 декабря 2025 г.
provocationScore: 17
Потенциальная проблема первичных конструкторов Первичные конструкторы - фича, представленная в C# 12, представляющая синтаксический сахар для обычного конструктора, в который можно передать параметры и они будут доступны в любом блоке объявленного типа. Конструктор с параметрами firstName и lastName выглядит вот так: public class Person(string firstName, string lastName)
{ public override string ToString() => $"Firstname - {firstName}, Lastname - {lastName}";
}
Ожидаемый результат - получить примерно вот такое поведение как у record типа, а именно неизменяемые члены класса { get; init; }
public record Person(string FirstName, string LastName);
Но увы, параметры конструктора это просто параметры, их значения не хранятся и они не являются членами класса. И в чём тогда проблема ? В том, что параметры, передаваемые в конструктор, доступны для изменения и им можно присваивать значения. В самом частом кейсе использования первичных конструкторов - внедрении зависимостей, это становится проблемой, особенно когда в команде есть новые разработчики, которые случайно могут сломать всё что угодно. Решения:
Способ 1. Для того чтобы обезопасить себя, используйте приватную переменную для ICustomService.
public class CustomController(ICustomService customService) : ControllerBase
{ private readonly ICustomService _customService = customService;
} Способ 2. Договоритесь с командой о запрете на использование первичных конструкторов через .editorconfig (Данный способ, я уверен, вызовет бурные споры и обсуждения, без авторитета в команде его непросто будет продвинуть 😁):
1. Откройте или создайте файл .editorconfig в корне вашего проекта.
2. Добавьте следующую строку в файл, чтобы отключить правило или настроить его (установите severity = none для полного игнорирования или severity = error для принудительного использования классических конструкторов): .editorconfig # Включить правило, но помечать как ошибку dotnet_diagnostic.IDE0290.severity = error А какое у вас мнение по поводу первичных конструкторов? Пишите, будет интересно почитать