Я ранее использовал SM 2.5.3. У меня был какой-то код, который хранил именованный экземпляр объекта, который выглядел так:
ObjectFactory.Configure(x =>
x.ForRequestedType<T>()
.TheDefault.IsThis(item)
.WithName(itemName));
Затем, чтобы запросить один из предметов из контейнера, я бы сделал:
return ObjectFactory.GetNamedInstance<T>(key);
Если бы конкретный именованный экземпляр не был в контейнере, это взорвалось бы, и я поймал исключение и возвратил ноль. Вот как я мог определить, было ли что-то помещено в контейнер или нет (использовал это для кеширования небольших фрагментов данных).
Однако вчера я обновил код до 2.6, и теперь он всегда возвращает экземпляр того, чем является «T», даже если именованный экземпляр не существует в контейнере. Даже новый метод TryGetInstance () делает это. Итак, мой вопрос: как мне узнать, находится ли именованный экземпляр на самом деле в контейнере? Я заметил, что получение неименованных экземпляров не ведет себя таким образом.
Вот так выглядит мой новый регистрационный код:
ObjectFactory.Configure(x => x.For<T>().Use(item).Named(itemName));
Если кто-нибудь может сказать мне, что я делаю неправильно, или у меня есть более подходящее предложение для этого, я был бы очень признателен!