Ben ExportMetaData aşağıdaki Dersimde ayarlanmış öznitelikleri var:ExportMetaData, tekli w/custom özniteliğinin yanı sıra birden çok değerle nasıl ayarlanır?
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; }
}
Ve tabii benim ImportMany:
[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)]
Ben de destekleyici bir arayüze sahip Ne yapardım
[ImportMany(typeof(IDocumentViewer))]
public IEnumerable<Lazy<IDocumentViewer, IDocumentViewerMetaData>> _viewers { get; set; }
Bunu yapmak, ExportMetaData özniteliğini kullanmak yerine güçlü yazılan bir öznitelik sınıfı kullanmaktır. Tek bir değeri de desteklerken bunu yapmanın bir yolunu anlayamadım (yukarıdaki örnekte Name, SupportsEditing).
Aşağıdaki benzer bir şey yapıyor tasavvur (ya da her neyse en iyisi olarak önerilir):
[Export(typeof(IDocumentViewer))]
[DocumentViewerMetadata(Name = "MyViewer")]
[DocumentViewerMetadata(SupportsEditing = true)]
[DocumentViewerMetadata(Format = DocFormat.DOC)]
[DocumentViewerMetadata(Format = DocFormat.DOCX)]
ben bunu yapmanın bir yolu var IS olduğundan oldukça eminim, ben sadece doğru yolu bulamadı noktaları birleştir. :)
Matthew - teşekkürler! Yaptığınız değişiklikleri anladım ve aslında onları tercih ederim - sınıflara uygulanacak daha az özellik ve bazı ek tip güvenlik (Arabirimi uygulayarak). Ayrıca, şimdi birden çok öğeyi geçebildiğim kadarıyla neyi kaçırdığımı biliyorum .. param []! Çözüme çok yakındım ama o küçük noktayı kaçırdım. Mükemmel cevabınız için çok teşekkür ederim. –