2010-12-14 11 views
1

Aus Frust und mehr als 3 Tage googeln dieses Problem ... Ich habe keine andere Wahl, als Sie mit meiner Frage zu belästigen.Silverlight 4, MEF, Export/Importfehler, Mefx will nicht arbeiten

Ich erstelle eine Silverlight-Anwendung. Ich benutze MEF. Wenn ich versuche, meine Anwendung auszuführen, erhalte ich den folgenden Fehler.

The invocation of the constructor on type 'IFG.Silverlight.Client.Views.MenuView' that matches the specified binding constraints threw an exception. [Line: 25 Position: 47]

und seine innere Ausnahme ist wie folgt ...

The composition remains unchanged. The changes were rejected because of the following error(s): The composition produced a single composition error. The root cause is provided below. Review the CompositionException.Errors property for more detailed information.

1) No valid exports were found that match the constraint '((exportDefinition.ContractName == "MenuViewModel") AndAlso (exportDefinition.Metadata.ContainsKey("ExportTypeIdentity") AndAlso "IFG.Silverlight.Client.ViewModel.MenuViewModel".Equals(exportDefinition.Metadata.get_Item("ExportTypeIdentity"))))', invalid exports may have been rejected.

Resulting in: Cannot set import 'IFG.Silverlight.Client.Views.MenuView.ViewModel (ContractName="MenuViewModel")' on part 'IFG.Silverlight.Client.Views.MenuView'. Element: IFG.Silverlight.Client.Views.MenuView.ViewModel (ContractName="MenuViewModel") --> IFG.Silverlight.Client.Views.MenuView

Ok. Mein Code ist sehr einfach, da es eine Testanwendung ist.

Ich habe eine Schnittstelle IRetailModel

namespace IFG.Silverlight.Client.Common 
{ 
    public interface IRetailModel 
    { ............ 

dann habe ich eine Klasse, die diese Schnittstelle

namespace IFG.Silverlight.Client.Model 
{ 
    [Export(typeof(IRetailModel))] 
    public class RetailModel : IRetailModel 
    { ................. 

Dann für die Ansicht haben implementiert ich meine Viewmodel

namespace IFG.Silverlight.Client.ViewModel 
{ 
    [PartCreationPolicy(CreationPolicy.NonShared)] 
    [Export(ViewModelTypes.MenuViewModel)] 
    public class MenuViewModel : IFGViewModelBase 
    { 
IRetailModel _model; 

     [ImportingConstructor] 
     public MenuViewModel(IRetailModel model) 
     { 

Nun, ich Ich fand heraus, dass es ein magisches Werkzeug namens MefX gibt, das tief in die Knochen gehen soll, um deinen Code zu entschlüsseln nd erzählt dir, was vor sich geht ... Ich konnte das nicht zur Arbeit bringen.

Ich folgte Richtungen von diesem Artikel http://blogs.msdn.com/b/nblumhardt/archive/2009/09/24/debug-composition-from-within-visual-studio.aspx

Wenn ich versuche, es zu laufen, sagt

Error: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

Dann zurück zu Google ging und ich fand diese Sicht MEFX (was dasselbe ist, aber mit einer GUI) und ich kann die .xap laden, aber im Grunde gibt es mir die gleichen Informationen, die ich von Visual Studio bekomme. Ich kann die verdammte [BECAUSE] nicht finden ...

Ich bin wirklich, ehrlich und tief, frustriert mit dieser Situation. Kann mir jemand erklären, wo ich MefX nicht dazu bringe, seinen Job zu machen? Ich kenne das Risiko, mit diesen Overnight Frameworks (Mangel an Dokumentation, Buggy, etc etc) umzugehen, die MEF zu sein scheint, aber Prism ist für mich keine Option (ich habe das Gefühl, eine M16 zu kaufen, um eine Fliege zu töten, wenn ich meine benutzen kann Finger).

Danke

+0

Nevermind Leute ... ich hatte vergessen, einen Verweis auf meine ViewModel DLL hinzuzufügen ... so einfach wie das ... :( – Tony

Antwort

2

Für die Zukunft wird eine aktualisierte Version von Visual MEFX zu diesem Blog-Post angebracht ist: How to Debug and Diagnose MEF Failures. Es ist auch Teil von MEFContrib, obwohl ich nicht sicher bin, ob die MEFContrib-Version alle Änderungen von der Version im Blogpost hat.