|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Aug 2001
Messaggi: 158
|
[C#] Problema con MEF
Ciao a tutti.
Volendo rifare un vecchio programmino ho colto l'occasione per imparare MEF e la modularità. Mi sono preso il mio buon vecchio libro di C# e Framework4 e ho cominciato a studiarlo.Dalla rete ho scaricato un programma dimostrativo per vedere come è composto il codice e cercare di capire un pò di più 'sto benedetto mef. Provo a scrivere un sw di mio pugno per adattarlo alle mie esigenze ma qua cominciano i problemi. In pratica il mio sw carica le Part nel Catalog ma non mi riempie il container. Il sw è suddiviso in vari progetti come riportato di seguito: Contratto.cs Codice:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Contracts { public interface ITipiProtocolli { List<string> ElencoProtocolli(); } public interface ITipo { string TipoProtocollo { get; } } public interface INomeProtocollo { string NomeProtocollo { get; } } } Codice:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using Contracts; namespace ElencoProtocolli { [Export(typeof(ITipiProtocolli))] public class ElencoProtocolli : ITipiProtocolli { [ImportMany(typeof(ITipo))] IEnumerable<Lazy<ITipo, INomeProtocollo>> protocolli; List<string> ITipiProtocolli.ElencoProtocolli() { List<string> str = new List<string>(); foreach (Lazy<ITipo, INomeProtocollo> p in protocolli) { str.Add(p.Metadata.NomeProtocollo + " " + p.Value); } return str; } } } Codice:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using System.ComponentModel.Composition; using Contracts; namespace Export1 { [Export(typeof(ITipo))] [ExportMetadata("Protocollo", "X21")] public class Mef1 : Contracts.ITipo { public string TipoProtocollo { get { return "X21"; } } } } Codice:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using System.ComponentModel.Composition; using Contracts; namespace Export2 { [Export(typeof(ITipo))] [ExportMetadata("Protocollo", "MODBUS")] public class Mef2 : Contracts.ITipo { public string TipoProtocollo { get { return "Modbus"; } } } } Codice:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.ComponentModel.Composition.Hosting; using System.ComponentModel.Composition; using System.Reflection; using Contracts; namespace WpfApplication1 { /// <summary> /// Logica di interazione per MainWindow.xaml /// </summary> public partial class MainWindow : Window { [Import] public ITipiProtocolli protocol; private CompositionContainer _container; public MainWindow() { InitializeComponent(); //An aggregate catalog that combines multiple catalogs var catalog = new AggregateCatalog(); string s; s = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); ; catalog.Catalogs.Add(new DirectoryCatalog(s)); _container = new CompositionContainer(catalog); //Fill the imports of this object try { this._container.ComposeParts(this); tb1.Text += "\nPath: " + s; } catch (CompositionException compositionException) { tb1.Text = compositionException.Errors.ToString(); tb1.Text += "\n" + compositionException.ToString(); } } private void Button_Click(object sender, RoutedEventArgs e) { if (protocol.ElencoProtocolli().Count == 0) { tb1.Text += "\n"+"Numero Protocolli = 0"; } foreach (string s in protocol.ElencoProtocolli()) { tb1.Text += "\n" + s; } for (int i = 0; i < _container.Catalog.Parts.Count(); i++) { tb1.Text+="\n"+_container.Catalog.Parts.ElementAt(i); } } } }
__________________
Il mio HW:notebook:acer aspire 5024WLMI mandato in riparazione per masterizzatore e schermo,desktop: (è un pò vecchiotto ma fa sempre il suo sporco lavoro):MB Biostar M7MKE SlotA,chipSet VIA KX133/686A UltraDMA66,Athlon700 BUS200 512KB cacheL2,512MB ram PC133,MatroxMilleniumG400DH. |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Aug 2001
Messaggi: 158
|
Dimenticavo, quando compilo l'eseguibile e tutte le dll generate vengono copiate in un unica directory
__________________
Il mio HW:notebook:acer aspire 5024WLMI mandato in riparazione per masterizzatore e schermo,desktop: (è un pò vecchiotto ma fa sempre il suo sporco lavoro):MB Biostar M7MKE SlotA,chipSet VIA KX133/686A UltraDMA66,Athlon700 BUS200 512KB cacheL2,512MB ram PC133,MatroxMilleniumG400DH. |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Aug 2001
Messaggi: 158
|
Risolto....quando si dice perdersi in un bicchiere d'acqua!!!!
![]()
__________________
Il mio HW:notebook:acer aspire 5024WLMI mandato in riparazione per masterizzatore e schermo,desktop: (è un pò vecchiotto ma fa sempre il suo sporco lavoro):MB Biostar M7MKE SlotA,chipSet VIA KX133/686A UltraDMA66,Athlon700 BUS200 512KB cacheL2,512MB ram PC133,MatroxMilleniumG400DH. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:16.