Использование StructureMap, скажем настроить несколько экземпляров для данного интерфейса, которые были определены имена:несколько экземпляров одного и того же типа
registry.For(interfaceType).Add(firstType).Named(firstName);
registry.For(interfaceType).Add(secondType).Named(secondName);
registry.For(interfaceType).Use(defaultType);
Это хорошо работает для моих потребностей. Однако в некоторых сценариях приложения у меня есть причина переопределить экземпляр, чтобы использовать тот же конкретный тип, что и другой экземпляр. Так эффективно происходит что-то вроде этого:
registry.For(interfaceType).Add(defaultType).Named(firstName);
registry.For(interfaceType).Add(defaultType).Named(secondName);
registry.For(interfaceType).Use(defaultType);
На практике, однако, казалось бы, что StructureMap затем использует не только тот же тип, но один и тот же экземпляр. Таким образом, есть точно один экземпляр defaultType
в памяти, который контейнер поставляет для любого именованного запроса.
Есть ли способ рассказать об этом, чтобы построить и использовать отдельные экземпляры, даже если они являются одним и тем же конкретным типом?
Если я правильно понял [это] (http://blog.ploeh.dk/2010/07/20/StructureMapPerRequestvs.Uniquelifetimes/), причина в том, что по умолчанию жизненный цикл 'PerRequest', вы бы нужно указать, чтобы жизненный цикл был уникальным, выполнив что-то вроде 'registry.For (interfaceType) .Add (defaultType) .Named (firstName) .LifecycleIs (новый UniquePerRequestLifecycle());' –
@TI: похоже, что это идет к другой крайности спектра, поставляя новый экземпляр по каждому запросу. То, что я ищу, - это где-то посередине, какой-то уникальный жизненный цикл имени-на-экземпляр. Я еще не нахожу ничего подобного, но ты определенно указал мне в хорошем направлении. Возможно, я могу запустить собственный «ILifecycle» или, в крайнем случае, внутренне отслеживать экземпляры в моей реализации локатора сервисов, которая находится между StructureMap и остальной частью кода. – David