ich eine Frage zu folgenden Ausnahme habe ich einen Anruf zu .ComposeParts(this)
abzuschließen empfing versuchen:Sie versuchen, herauszufinden, was die MEF Zusammensetzung Fehler bedeuten
Die Zusammensetzung kann einen einzelnen Zusammensetzung Fehler erzeugt. Die Ursache ist unten angegeben. Weitere Informationen finden Sie in der CompositionException.Errors-Eigenschaft .
1) Der Export 'CustomersModule.CustomerMenu (ContractName = "ModLibrary.IMenu")' ist nicht zuweisbar Typ ‚System.Collections.Generic.IEnumerable`1 [[ModLibrary.IMenu, ModLibrary, Version = 1.0.0.0, Kultur = neutral, PublicKeyToken = null]] '.
in Resultierende: Kann nicht importieren gesetzt 'ModAppWorks.Host.Menus (ContractName = "ModLibrary.IMenu")' auf Teil 'ModAppWorks.Host'. Element: ModAppWorks.Host.Menus (ContractName = "ModLibrary.IMenu") -> ModAppWorks.Host
Es gibt einen Teil, der es scheint, als ob der Fehler bedeutet, dass IMenu
IEnumerable
implementieren müssen. Hier ist meine Zusammensetzung Code:
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
Ich bin den Import einer Klasse, die Instanzen ein ToolStripMenuItem
. Meine Export Beispiel:
[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
Wenn IMenu
ist nicht erforderlich IEnumerable
zu implementieren, jemand etwas tut, sehe ich vielleicht falsch machen werden?
bah..dang 5-Minuten-Timer. Wenn Sie die Antwort in wenigen Minuten nicht sehen, kommentieren Sie sie. – IAbstract
Ich bekomme endlich den Dreh raus mit MEF. Bis jetzt bin ich ein Fan. – IAbstract
Es ist eine wunderbare Bibliothek. Froh, dass ich helfen konnte, @dboarman! –