Mi manca qualcosa di base quando si tratta di utilizzare MEF. L'ho fatto funzionare utilizzando campioni e una semplice app per console in cui tutto è nello stesso assembly. Quindi inserisco alcune importazioni ed esportazioni in un progetto separato che contiene varie entità. Voglio utilizzare queste entità in un test MS, ma la composizione non viene mai effettivamente eseguita. Quando sposto la composizione nel costruttore di un'entità in questione funziona, ma è ovviamente sbagliato. Solo GetExecutingAssembly "vede" il processo di test? Cosa mi manca nei contenitori? Ho provato a mettere il contenitore in un Utilizzo nel test senza fortuna. I documenti MEF sono ancora molto scarsi e non riesco a trovare un semplice esempio di un'applicazione (o MS Test) che utilizza entità di un progetto diverso ...MEF non trova parti negli altri gruppi
risposta
In .NET, ogni file exe o DLL viene chiamato un assembly . Pertanto, quando si crea un catalogo basato sul "gruppo di esecuzione" e lo si utilizza nel punto di ingresso dell'applicazione, vengono incluse solo le parti definite all'interno del progetto exe. Non si ottengono parti definite nelle DLL.
provare a sostituire questo:
var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
da questo:
var catalog = new AggregateCatalog(
new ComposablePartCatalog[]
{
new AssemblyCatalog(Assembly.GetExecutingAssembly()),
new DirectoryCatalog(".")
});
edit: Ho appena scoperto che c'è una soluzione più semplice:
var catalog = new DirectoryCatalog(".", "*");
() In realtà, un assembly può essere costituito da più file, ma questo è usato raramente. Il termine viene utilizzato anche per la COM affiancata.
Sì. È necessario assicurarsi di aggiungere il proprio assieme (quello con importazioni ed esportazioni) al catalogo prima della composizione. In questo modo, può trovare le parti appropriate.
GetExecutingAssembly fa esattamente quello che dice: ottiene l'assembly attualmente in esecuzione, ovvero quello che ha scritto quel codice specifico. Nel tuo caso, questo è il test assembly, non il tuo progetto "library".
Fare in modo che il test aggiunga esplicitamente il progetto di libreria al catalogo e molto probabilmente funzionerà come previsto.
- 1. Impossibile caricare più parti MEF
- 2. Configurazione parti MEF, dove memorizzare?
- 3. Sezioni di configurazione personalizzate negli assiemi di esportazione MEF
- 4. Trova elementi non comuni negli elenchi
- 5. Creazione di più istanze di parti importate MEF
- 6. Trova sostituisci gruppi denominati regexp in geany
- 7. Come posso trovare gruppi di record che corrispondono ad altri gruppi di record (divisione relazionale?)
- 8. Rende le classi interne visibili ad altri gruppi
- 9. MEF: DirectoryPartCatalog
- 10. Configurazione MEF
- 11. Gruppi nidificati di Django: Gruppi in gruppi
- 12. MEF = potrebbe provare frustrazione?
- 13. Trova gruppi di Active Directory in cui nome gruppo come
- 14. Trova mantenere i duplicati negli hash di Ruby
- 15. Rimozione dal contenitore MEF
- 16. Includi gruppi GAC nel raccoglitore
- 17. Trova l'elemento intermedio negli array uniti in O (logn)
- 18. Utilizzando MEF come un CIO
- 19. Caliburn.Micro e MEF su wpf
- 20. MEF plugin di ricerca ricorsiva
- 21. Modulo PowerShell e ActiveDirectory - Trova utenti che non sono membri di gruppi particolari
- 22. Moq a importazione MEF?
- 23. MEF: ComposeParts mancante
- 24. MEF GetExportedValue con metadati
- 25. trova un punto più vicino ad altri punti
- 26. Markdown non funziona negli allegati
- 27. MEF vs Mono.AddIn
- 28. Dove posso conoscere MEF?
- 29. MEF OSGi for .NET?
- 30. Come si fa riferimento a gruppi di terze parti in WebMatrix?