У меня возникли трудности с выяснением того, как иметь кэш StructureMap экземпляра, отличного от значения по умолчанию. Я могу кэшировать экземпляр по умолчанию с кодом, подобным этомуИспользование StructureMap для кэширования именованного экземпляра
ForRequestedType<ISession>()
.CacheBy(InstanceScope.HttpContext)
.TheDefault.Is.ConstructedBy(() => ObjectFactory.GetInstance<ISessionFactory>().OpenSession());
который работает должным образом. И я могу создать именованный экземпляр штраф
InstanceOf<User>().Is.ConstructedBy(() => someAwesomeConstructor()).WithName("CurrentUser");
Но я бы очень хотел, чтобы кэшировать «CurrentUser» на сессии, но .CacheBy() существует только в CreatePluginFamilyExpression <> и единственный способ, которым я могу сказать, чтобы получить от CreatePluginFamilyExpression <> to IsExpression <> есть свойство TheDefault, которое заставляет меня создавать по умолчанию, чего я не хочу.
В этом случае это прекрасно. У меня есть только один «специальный» экземпляр, поэтому проблема с кешем не является проблемой. Мне просто не нужен экземпляр по умолчанию, поскольку это может смутить кого-то, если они помещают пользователя в конструктор и внезапно вытаскивают текущего пользователя из ниоткуда. –