// this is always called under a lock
        private ExportingMember GetExportingMemberFromDefinition(ExportDefinition definition)
        {
            ExportingMember result;
            ReflectionMemberExportDefinition reflectionExport = definition as ReflectionMemberExportDefinition;

            if (reflectionExport == null)
            {
                return(null);
            }

            int exportIndex = reflectionExport.GetIndex();

            if (_exportsCache == null)
            {
                _exportsCache = new Dictionary <int, ExportingMember>();
            }
            if (!_exportsCache.TryGetValue(exportIndex, out result))
            {
                result = GetExportingMember(definition);
                if (result != null)
                {
                    _exportsCache[exportIndex] = result;
                }
            }

            return(result);
        }