Как мы можем использовать ненулевые ссылочные типы в сочетании с шаблоном опций ?
Допустим, у нас есть модель опций с именем MyOptions
.
Службы, требующие этих опций, вводятся IOptions<MyOptions> options
в конструктор.
Настройка опций происходит на IServiceCollection
следующим образом:
services
.AddOptions<MyOptions>()
.Configure(options =>
{
options.Name = "ABC";
});
Теперьпроблема в определении MyOptions
:
public sealed class MyOptions
{
public string Name { get; set; }
}
, которое генерирует предупреждение:
CS8618 Необнуляемое свойство 'Name' неинициализировано.Подумайте об объявлении свойства как обнуляемого.
- Мы не хотим делать обнуляемым
Name
, так как тогда нам нужно везде ставить традиционные проверки на ноль (что противоречит цели ненулевые ссылочные типы ) - Мы не можем создать конструктор, обеспечивающий создание класса
MyOptions
с ненулевым значением name
, поскольку метод Configure
создает параметрыэкземпляр для нас - Мы не можем использовать трюк с нулевым прощением трюк (
public string name { get; set; } = null!;
), так как тогда мы не сможем убедиться, что свойство Name
установлено, и мы можем получитьс null
в свойстве Name
, где этого не следует ожидать (внутри служб)
Любой другой вариант, который я забыл рассмотреть?