private void LoadBinaryComponents(ILoggerFactory loggerFactory, string[] directories, SearchOption searchOption)
        {
            var logger = loggerFactory.CreateLogger <DirectoryComponentDescriptionLookup>();

            var descriptionReader = new BinaryDescriptionReader();

            foreach (string location in directories)
            {
                foreach (string file in Directory.GetFiles(location, "*.cdcom", searchOption))
                {
                    using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {
                        if (!descriptionReader.Read(fs))
                        {
                            logger.LogError($"Failed to load {file}");
                            continue;
                        }

                        foreach (var description in descriptionReader.ComponentDescriptions)
                        {
                            description.Metadata.Location = ComponentDescriptionMetadata.LocationType.Installed;
                            description.Source            = new ComponentDescriptionSource(file);

                            foreach (var type in description.GetComponentTypes())
                            {
                                internalLookup.AddDescription(type, description);
                            }
                        }
                    }
                }
            }
        }
        private void LoadCompiledComponents(string directory)
        {
            foreach (string file in Directory.GetFiles(directory, "*.cdcom", SearchOption.TopDirectoryOnly))
            {
                using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    var binaryLoader = new BinaryDescriptionReader();
                    if (binaryLoader.Read(fs))
                    {
                        foreach (var description in binaryLoader.ComponentDescriptions)
                        {
                            description.Metadata.Location = ComponentDescriptionMetadata.LocationType.Installed;
                            description.Source            = new ComponentDescriptionSource(file,
                                                                                           new System.Collections.ObjectModel.ReadOnlyCollection <ComponentDescription>(new ComponentDescription[] { description }));

                            var type = GetTypeFromDescription(description);
                            AddDescription(type, description);

                            var icon = description.Metadata.Icon as MultiResolutionImage;
                            if (icon != null)
                            {
                                icons.Add(Tuple.Create(type, (ComponentConfiguration)null), icon);
                            }
                        }
                    }
                }
            }
        }