private void InitDiscovery()
        {
            if (_discoveredParts != null)
            {
                return;
            }

            var types = _configuration.DebugGetRegisteredTypes();
            var defaultAttributeContext = _configuration.DebugGetDefaultAttributeContext() ?? new DirectAttributeContext();
            var discovered = new List <DiscoveredPart>();
            var ignored    = new List <Type>();

            foreach (var typeSet in types)
            {
                var ac = typeSet.Item2 ?? defaultAttributeContext;
                var activationFeatures = TypedPartExportDescriptorProvider.DebugGetActivationFeatures(ac);
                var inspector          = new TypeInspector(ac, activationFeatures);

                foreach (var type in typeSet.Item1)
                {
                    DiscoveredPart part;
                    if (inspector.InspectTypeForPart(type.GetTypeInfo(), out part))
                    {
                        discovered.Add(part);
                    }
                    else
                    {
                        ignored.Add(type);
                    }
                }
            }

            _discoveredParts = discovered.ToArray();
            _ignoredTypes    = ignored.ToArray();
        }