Hallo Ich habe einige Probleme in Beispiel Import-Szenarien:MEF Import Szenario
[Export(typeof(IICon))]
public class WriteInputData : IICon
{
[Import(typeof(IIOWriter))]
public IIOWriter IOWriter { get; set; }
public object Input { get; set; }
public void Process()
{
IOWriter.Write(Input);
}
}
Dann hawe i zwei Klassen, die Schnittstelle implementieren IIOWriter mag:
[Export(typeof(IIOWriter))]
public class FileWriter : IIOWriter
{
public string FilePath { get; set; }
public void Write(object data)
{
if (string.IsNullOrEmpty(FilePath))
FilePath = @"c:\test.txt";
var fl = new StreamWriter(FilePath, true);
fl.Write((string)data);
fl.Flush();
fl.Close();
}
public string Name
{
get { return "FileWriter"; }
}
}
[Export(typeof(IIOWriter))]
public class ConsoleWrite : IIOWriter
{
public void Write(object data)
{
Console.WriteLine((string)data);
}
public string Name
{
get { return "ConsoleWrite"; }
}
}
Wie kann ich das so an Benutzer lassen er kann das in der Laufzeit ändern, also Beispiel, wenn er Typ in ListBox FileWriter auswählt, als der IIOWriter in WriteInputData wird injiziert FileWriter Ende so ein .. Sorry für mein schlechtes Englisch.
+1, aber es ist nicht erforderlich, den Container explizit aufzurufen, um Metadaten zu verwenden. Sie können einfach 'IEnumerable> 'importieren. –