virtual boost::shared_ptr<void> construct(di::type_info const & type, di::type_provider & unscoped) { if(!m_instances.get()) m_instances.reset(new instance_map_t); instance_map_t::iterator it = m_instances->find(type); if(it == m_instances->end()) (*m_instances)[type] = unscoped.untyped_get(); return (*m_instances)[type]; }