ich folgende ExportMetaData Attribut auf meiner Klasse gesetzt:Wie legen Sie ExportMetaData mit mehreren Werten sowie einzelnes w/benutzerdefiniertes Attribut fest?
[Export(typeof(IDocumentViewer))]
[ExportMetadata("Name", "MyViewer")]
[ExportMetadata("SupportsEditing", true)]
[ExportMetadata("Formats", DocFormat.DOC, IsMultiple = true)]
[ExportMetadata("Formats", DocFormat.DOCX, IsMultiple = true)]
[ExportMetadata("Formats", DocFormat.RTF, IsMultiple = true)]
Ich habe auch eine unterstützende Schnittstelle:
public interface IDocumentViewerMetaData {
/// <summary>
/// Gets the format.
/// </summary>
/// <value>The format.</value>
IEnumerable<DocFormat> Formats { get; }
/// <summary>
/// Gets the name of the viewer
/// </summary>
/// <value>The name.</value>
string Name { get; }
/// <summary>
/// Gets a value indicating whether this viewer supports editing
/// </summary>
/// <value><c>true</c> if [supports editing]; otherwise, <c>false</c>.</value>
bool SupportsEditing { get; }
}
Und meinen ImportMany natürlich:
[ImportMany(typeof(IDocumentViewer))]
public IEnumerable<Lazy<IDocumentViewer, IDocumentViewerMetaData>> _viewers { get; set; }
Was würde ich Sie verwenden eine stark typisierte Attributklasse, anstatt das ExportMetaData-Attribut zu verwenden. Ich habe keinen Weg gefunden, dies zu tun, während ich auch einzelne Werte unterstütze (Name, SupportsEditing, im obigen Beispiel).
ich etwas ähnlich der folgenden Envision tun (oder was auch immer, wie am besten vorgeschlagen wird):
[Export(typeof(IDocumentViewer))]
[DocumentViewerMetadata(Name = "MyViewer")]
[DocumentViewerMetadata(SupportsEditing = true)]
[DocumentViewerMetadata(Format = DocFormat.DOC)]
[DocumentViewerMetadata(Format = DocFormat.DOCX)]
ich ziemlich sicher bin, dass es einen Weg gibt, dies zu tun, ich habe einfach nicht den richtigen Weg gefunden zu verbinde die Punkte. :)
Matthew - danke !! Ich verstehe die Änderungen, die Sie vorgenommen haben, und bevorzuge sie tatsächlich - weniger Attribute, die auf die Klassen angewendet werden, sowie einige zusätzliche Typ-Sicherheit (Implementierung der Schnittstelle). Auch jetzt weiß ich, was ich vermisst habe, soweit es möglich ist, mehrere Gegenstände zu übergeben .. params []! Ich war so nah an deiner Lösung, aber habe diesen kleinen Punkt verpasst. Vielen Dank für Ihre ausgezeichnete Antwort. –