Класс имеет некоторые обязательные зависимости, внедренные в него при первом создании класса, затем каждый раз вводится один и тот же экземпляр.
Класс был зарегистрирован в Ninject каксинглтон.Это означает, что в первый раз, когда Ninject разрешит IConsistencyCheckCacheHelper
, он создаст экземпляр ConsistencyCheckCacheHelper
, а затем снова и снова будет использовать тот же экземпляр.
Таким образом, Ninject не внедряет один и тот же экземплярзависимости в ConsistencyCheckCacheHelper
снова и снова.Он создает только один экземпляр ConsistencyCheckCacheHelper
, поэтому любой экземпляр зависимости, в который он вставлен, также не изменится.
Если вы хотите, чтобы зависимость внутри используемой ConsistencyCheckCacheHelper
изменялась каждый раз, когда она разрешается, вы не можете зарегистрировать ее как одиночную.Вам нужно будет использовать другую область.
.InTransientScope()
(по умолчанию) означает, что каждый раз, когда тип разрешается, создается новый экземпляр.
.InRequestScope()
означает, что для каждого веб-запроса создается новый экземпляр.
Это все еще немного сложнее, чем это.Например, если ConsistencyCheckCacheHelper
зарегистрирован как переходный процесс, каждый раз создается новый экземпляр.Но если от чего-то еще зависит и , что зависимость регистрируется как одноэлементная, каждый новый экземпляр ConsistencyCheckCacheHelper
будет получать один и тот же экземпляр этой зависимости.
Часто рекомендуетсяначать с переходных зависимостей.Если нам не нужно повторно использовать экземпляр, стоимость создания новых объектов, вероятно, не так велика.Для веб-приложения InRequestScope
, скорее всего, безопасно.Я бы использовал только одноэлементную область видимости, если я уверен, что смогу безопасно повторно использовать один экземпляр этого класса вместе с одним экземпляром, если его зависимости и их зависимости и т. Д.
Ninject предметные области