Пытаюсь выяснить, что означает эта ошибка композиции MEF

У меня вопрос по поводу следующего исключения, которое я получил при попытке выполнить вызов .ComposeParts (this) :

Композиция произвела сингл ошибка композиции. Основная причина - предоставлено ниже. Обзор CompositionException.Errors свойство для более подробной информации.

1) Экспорт 'CustomersModule.CustomerMenu (ContractName = "ModLibrary.IMenu") 'является не присваивается типу 'System.Collections.Generic.IEnumerable`1 [[ModLibrary.IMenu, ModLibrary, версия = 1.0.0.0, Культура = нейтральный, PublicKeyToken = null]] '.

Результат: Невозможно установить импорт 'ModAppWorks.Host.Menus (ContractName = "ModLibrary.IMenu") 'в часть 'ModAppWorks.Host'. Элемент: ModAppWorks.Host.Menus (ContractName = "ModLibrary.IMenu") -> ModAppWorks.Host

Там есть часть, которая кажется, что ошибка означает, что IMenu должен реализовывать IEnumerable . Вот мой код композиции:

static class Program
{
    [STAThread]
    static void Main()
    {
        Host host = new Host();
        host.Run();
    }
}

class Host
{
    #region Init
    public Host()
    { }
    #endregion

    #region Functions
    public void Run()
    {
        Compose();

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new AppHost());
    }

    private void Compose()
    {
        var agrCatalog = new AggregateCatalog();
        var dirCatalog = new DirectoryCatalog(Path.GetDirectoryName
            (Assembly.GetExecutingAssembly().Location) + "..\\..\\..\\Extensions", "*.dll");
        var asmCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());

        agrCatalog.Catalogs.Add(dirCatalog);
        agrCatalog.Catalogs.Add(asmCatalog);

        var hostContainer = new CompositionContainer(agrCatalog);
        hostContainer.ComposeParts(this);
    }
    #endregion

    #region Properties
    [Import(typeof(IMenu))]
    public IEnumerable<IMenu> Menus { get; set; }
    #endregion

Я импортирую класс, который представляет собой ToolStripMenuItem . Мой образец экспорта:

[Export(typeof(IMenu))]
public class CustomerMenu : IMenu
{
    #region Fields
    private System.Windows.Forms.ToolStripMenuItem CustomerMainMenu;
    private System.Windows.Forms.ToolStripSeparator mnuSeparator;
    private System.Windows.Forms.ToolStripMenuItem CustomersMenuItem;
    #endregion

    #region Init
    public CustomerMenu()
    {
        InitializeComponent();
        // 
        // CustomerMenu
        // 
        this.CustomerMainMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
        this.mnuSeparator,
        this.CustomersMenuItem});
        this.CustomerMainMenu.Name = "CustomerMenu";
        this.CustomerMainMenu.Size = new System.Drawing.Size(94, 20);
        this.CustomerMainMenu.Text = "Customer Menu";
        // 
        // toolStripMenuItem1
        // 
        this.mnuSeparator.Name = "toolStripMenuItem1";
        this.mnuSeparator.Size = new System.Drawing.Size(149, 6);
        // 
        // Customers
        // 
        this.CustomersMenuItem.Name = "Customers";
        this.CustomersMenuItem.Size = new System.Drawing.Size(152, 22);
        this.CustomersMenuItem.Text = "Customers";
    }

    #endregion

    #region Functions
    private void InitializeComponent()
    {
        this.CustomerMainMenu = new System.Windows.Forms.ToolStripMenuItem();
        this.mnuSeparator = new System.Windows.Forms.ToolStripSeparator();
        this.CustomersMenuItem = new System.Windows.Forms.ToolStripMenuItem();
    }

    #endregion

Если IMenu не требуется для реализации IEnumerable , кто-нибудь видит, что я делаю неправильно?

5
задан IAbstract 6 December 2010 в 03:52
поделиться