private void ProcessDllRepository(DirectoryInfo dllDirectory)
 {
     foreach (FileInfo file in dllDirectory.GetFiles("*.dll"))
     {
         Assembly assembly = Assembly.LoadFile(file.FullName);
         foreach (Type type in assembly.GetTypes())
         {
             if (typeof(IProductImporter).IsAssignableFrom(type) && !type.IsInterface)
             {
                 ReflectionComboItem comboItemImporter = new ReflectionComboItem()
                 {
                     LoadClass = type.FullName, AssemblyPath = file.FullName, ShowName = GetImporterType(type)
                 };
                 productImporterTypeComboBox.Items.Add(comboItemImporter);
             }
         }
     }
 }
        private void invokeProductImporterButton_Click(object sender, EventArgs e)
        {
            logListBox.Items.Clear();
            if (productImporterTypeComboBox.SelectedItem != null)
            {
                ReflectionComboItem selectedImporter = (ReflectionComboItem)productImporterTypeComboBox.SelectedItem;

                try
                {
                    string assemblyPath = selectedImporter.AssemblyPath;
                    string className    = selectedImporter.LoadClass;

                    Assembly assembly = Assembly.LoadFile(assemblyPath);
                    Type     type     = assembly.GetType(className);

                    MethodInfo method   = type.GetMethod("LoadProducts");
                    var        instance = Activator.CreateInstance(type);

                    object productsLoaded = method.Invoke(instance, null);

                    ICollection <ProductToImport> productsToImport = (ICollection <ProductToImport>)productsLoaded;

                    if (productsToImport != null)
                    {
                        ImportProduct(productsToImport);
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Error interno de libreria, seleccione otra.", "ERROR");
                    productImporterTypeComboBox.Items.Remove(selectedImporter);
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar un tipo de importador");
            }
        }