ASP.NET Core DI с зависимыми переходными процессами - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть 2 службы: IDbStorage для операций с базой данных и управление исключениями IExceptionManager.Сам класс ExceptionManager опирается на экземпляр IDbStorage:

    public class ExceptionManager : IExceptionManager
    {
        private IDbStorage _CurrentDbStorage;

        public IDbStorage CurrentDbStorage
        {
            get { return _CurrentDbStorage; }
        }

        public ExceptionManager(IDbStorage currentDbStorage)
        {
            _CurrentDbStorage = currentDbStorage;
        }
}

При запуске я объявляю:

services.AddTransient<IDbStorage, OracleDbStorage>();
services.AddTransient<IExceptionManager, ExceptionManager>();

Во всех контроллерах я использовал обе службы.Например:

public abstract class BusinessObjectManagementController<T1> : ControllerBase where T1 : BusinessObject
    {

        private IDbStorage _CurrentDbStorage;

        public IDbStorage CurrentDbStorage
        {
            get { return _CurrentDbStorage; }
        }

        private IExceptionManager _CurrentExceptionMgr;

        public IExceptionManager CurrentExceptionMgr
        {
            get { return _CurrentExceptionMgr; }
        }

        public BusinessObjectManagementController(IDbStorage currentDbStorage, IExceptionManager currentExceptionMgr)
        {
            _CurrentDbStorage = currentDbStorage;
            _CurrentExceptionMgr = currentExceptionMgr;
        }

}

Все отлично работает, однако я не уверен, что тот же экземпляр IDbStorage внедрен в CurrentExceptionMgr или создан новый?

Спасибо.

1 Ответ

0 голосов
/ 22 февраля 2019

. Для .NET Core DI существует три разных срока службы.Вы объявили IDbStorage как временный и, следовательно, будете создавать новый экземпляр OracleDbStorage при каждом запросе службы.Вот соответствующий бит из документации .NET Core по этому вопросу:

Службы временного обслуживания создаются каждый раз, когда их запрашивают.Это время жизни лучше всего подходит для облегченных сервисов без сохранения состояния.

Сервисы с ограниченным сроком действия создаются один раз за запрос.

Сервисы с единственным сроком службы создаются при первом запросе (или когда запускается ConfigureServices иэкземпляр указывается при регистрации услуги).Каждый последующий запрос использует один и тот же экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...