Привет,
Ситуация такая: Делаю загрузку плагинов с помощью MEF.
Содержание плагина.

using System;
using System.ComponentModel.Composition;
using InterfacePlugin;
using System.Windows;
 
namespace Plugin1
{
    [Export(typeof(IPlugin))]
    public class Class1 : IPlugin
    {
        public string PluginName { get { return "Name"; } } // Имя плагина
        public string PlugunCategory { get { return "Test"; } } // Категория 
 
        public void PluginStart(string str)
        {
            //-- Что-то тут --------------
        }
    }
}

Нужно следующие на форме tabControl1, при загрузки плагина создается tabPage, на tabPgae создается ListView, нужно проверять категорию по индификатору PlugunCategory, и добавлять запись индефикатора PluginName в в ListView на указанной tabPage.

То есть если у нас есть вкладка на tabControl1 с именем "Test" и у индификатора плагина название тоже "Test" то добавить в PluginName в ListView на этой вкладке.

Не понятно? Пойдем к практике.

Код обработки

        public void PluginConnect()
        {
            //  ListView Box = new ListView();
            int Incriment = 0;
            DirectoryCatalog m_catalog = new DirectoryCatalog("Plugin");
            CompositionContainer container = new CompositionContainer(m_catalog);
            container.ComposeParts(this);
            if (Plugins == null) return;
 
 
            foreach (var plugin in Plugins) // Цикл перебора плагинов 
            {
 
                if (tabControl1.TabPages.Count == 0) // Проверяем если нету вкладки создаем
                {
                    ListView Box = new ListView();
                    tabControl1.TabPages.Add(plugin.PlugunCategory);
                    Box.Parent = tabControl1.TabPages[Incriment];
                    Box.Name = plugin.PlugunCategory;
                    Box.Top = 111;
                    Box.Show();
                    Box.Items.Add(plugin.PluginName);
                    Incriment++;
                }
 
                else
                {
                    foreach (TabPage tab in tabControl1.TabPages) // Получаем список вкладок
                    {
                        foreach (ListView item in tab.Controls) //Получаем список ListView на вкладках
                        {
                            ListView List = item as ListView;
 
                            /*Проверяем имя ListView если оно равно имени
                              индификатора то добавляем PluginName в него*/
                            if (List.Name == plugin.PlugunCategory)
                            {
                                List.Items.Add(plugin.PluginName);
                            }
                            else //Если нет такова имени создаем новою вкладку.
                            {
                                ListView Box = new ListView();
                                tabControl1.TabPages.Add(plugin.PlugunCategory);
                                Box.Parent = tabControl1.TabPages[Incriment];
                                Box.Name = plugin.PlugunCategory;
                                Box.Top = 111;
                                Box.Show();
                                Box.Items.Add(plugin.PluginName);
                                Incriment++;
                            }
                        }
                    }
                }
            }

Выглядит это все так
Есть 4 плагина.
Со следующими индификаторами
1)Плагин:
public string PluginName { get { return "NamePlagin 1"; } }
public string PlugunCategory { get { return "Test_1"; } }
2)Плагин:
public string PluginName { get { return "NamePlagin 2"; } }
public string PlugunCategory { get { return "Test_1"; } }
3)Плагин:
public string PluginName { get { return "NamePlagin 3"; } }
public string PlugunCategory { get { return "Test_2"; } }
4)Плагин:
public string PluginName { get { return "NamePlagin 4"; } }
public string PlugunCategory { get { return "Test_2"; } }

Проект выглядит как на рисунки один.
Но на рисунки видна 3 вкладка которой не должно быть (см. Описание индификаторов плагинов чуть выше.)
Проблему нашел с помощью отладки цикл foreach (ListView item in tab.Controls) крутит больше, чем нужно относительно главному циклу.
Причину объяснять долго, приложу исходный проект с 4 плагинами, у плагинов индификаторы те что описаны выше.

Помогите решить задачу.
Attached Thumbnails

-image-
-image-