Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Службы можно зарегистрировать в временном,ограниченном или одноэлементном времени существования. Для каждой зарегистрированной службы выбирайте подходящее время существования.
Transient
Служба с временным временем существования создается каждый раз, когда она запрашивается из контейнера службы. Чтобы зарегистрировать сервис как временный, вызовите AddTransient.
В приложениях, обрабатывающих запросы, временные службы удаляются в конце запроса. Это время существования вызывает выделение по запросу, так как службы разрешаются и создаются каждый раз. Дополнительные сведения см. в руководстве по IDisposable для временных и общих экземпляров.
Сфокусированные
Для веб-приложений время существования с ограниченной областью видимости означает, что службы создаются один раз на каждый запрос клиента (подключение). В приложениях, обрабатывающих запросы, службы с заданной областью удаляются в конце запроса. Зарегистрируйте службы с областью действия путем вызова AddScoped.
Замечание
При использовании Entity Framework Core метод расширения AddDbContext по умолчанию регистрирует типы DbContext с заданной областью времени существования.
Служба с заданной областью всегда должна использоваться в пределах области — неявной области (например, для каждого запроса в ASP.NET Core) или явной области, созданной с помощью IServiceScopeFactory.CreateScope().
Не извлекайте службу ограниченной области непосредственно из одиночного объекта с помощью внедрения конструктора или запрашивая её в одиночном объекте. Это приводит к тому, что объект службы ведет себя как одиночка, что может вызвать некорректное состояние при обработке последующих запросов.
При создании и использовании явной области с IServiceScopeFactory разрешается разрешать скоуп-службу в рамках синглтона.
Также допустимо:
- Разрешение одноэлементной службы из службы с заданной областью или временной службы.
- Разрешите службу с заданной областью из другой службы с заданной областью или временной службой.
По умолчанию в среде разработки разрешение службы из другой службы с более длинным временем существования вызывает исключение. Дополнительные сведения см. в разделе Проверка области.
Singleton
Службы с временем существования singleton создаются в следующих случаях.
- При первом запросе.
- Разработчиком при предоставлении экземпляра реализации непосредственно в контейнер. Этот подход требуется достаточно редко.
Каждый последующий запрос на реализацию службы из контейнера внедрения зависимостей использует тот же экземпляр. Если в приложении нужно использовать одноэлементные службы, разрешите контейнеру служб управлять временем их существования. Не реализуйте одноэлементный подход и предоставьте код для удаления одноэлементных объектов. Услуги ни в коем случае не должны утилизироваться кодом, который извлек их из контейнера. Если тип или фабрика зарегистрированы как одноэлементный объект, контейнер автоматически удаляет одноэлементный объект.
Зарегистрируйте синглтон-сервисы с помощью AddSingleton. Одноэлементные службы должны быть потокобезопасными и часто использоваться в бессостояточных службах.
В приложениях, обрабатывающих запросы, синглтон-сервисы удаляются, когда ServiceProvider освобождается по завершении работы приложения. Так как память не освобождается до завершения работы приложения, рассмотрите возможность использования памяти с одной службой.