Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Edytor jest kompilowany przy użyciu składników Managed Extensibility Framework (MEF). Możesz tworzyć własne składniki MEF w celu rozszerzenia edytora, a kod może również korzystać ze składników edytora.
MEF to biblioteka .NET, która umożliwia dodawanie i modyfikowanie funkcji aplikacji lub składnika zgodnego z modelem programowania MEF. Edytor programu Visual Studio może udostępniać składniki MEF i korzystać z nich.
MEF znajduje się w zestawie bibliotek .NET Framework w wersji 4 System.ComponentModel.Composition.dll.
Aby uzyskać więcej informacji na temat mef, zobacz Managed Extensibility Framework (MEF).
Elementy składowe i pojemniki kompozycji
Część składnika jest klasą lub składową klasy, która może wykonać jedną (lub obie) z następujących czynności:
Korzystanie z innego składnika
Ma być używane przez inny komponent
Rozważmy na przykład aplikację zakupową, która ma składnik wpisu zamówienia, który zależy od danych dostępności produktu dostarczonych przez składnik spisu magazynu. W kategoriach MEF sekcja zapasów może eksportować dane dostępności produktu, a sekcja wprowadzania zamówień może importować dane. Część rejestracji zamówień i część dotycząca zapasów nie muszą być ze sobą powiązane; kontener kompozycji (dostarczony przez aplikację hosta) jest odpowiedzialny za zarządzanie zestawem eksportów oraz rozwiązywanie eksportów i importów.
Kontener kompozycji, CompositionContainer, jest zwykle własnością hosta. Kontener kompozycji utrzymuje wykaz wyeksportowanych części składników.
Eksportowanie i importowanie części składników
Można wyeksportować dowolną funkcjonalność, o ile jest implementowana jako klasa publiczna lub publiczny element członkowski klasy (właściwość lub metoda). Nie trzeba wywodzić części składowej z ComposablePart. Zamiast tego należy dodać atrybut ExportAttribute do klasy lub jej składowej, którą chcesz wyeksportować. Ten atrybut określa kontrakt , za pomocą którego inna część składnika może importować funkcje.
Kontrakt eksportu
Definiuje ExportAttribute jednostkę (klasę, interfejs lub strukturę), która jest eksportowana. Zazwyczaj atrybut eksportu przyjmuje parametr określający typ eksportu.
[Export(typeof(ContentTypeDefinition))]
class TestContentTypeDefinition : ContentTypeDefinition { }
Domyślnie ExportAttribute atrybut definiuje kontrakt, który jest typem klasy eksportu.
[Export]
[Name("Structure")]
[Order(After = "Selection", Before = "Text")]
class TestAdornmentLayerDefinition : AdornmentLayerDefinition { }
W tym przykładzie domyślny [Export] atrybut jest odpowiednikiem [Export(typeof(TestAdornmentLayerDefinition))].
Możesz również wyeksportować właściwość lub metodę, jak pokazano w poniższym przykładzie.
[Export]
[Name("Scarlet")]
[Order(After = "Selection", Before = "Text")]
public AdornmentLayerDefinition scarletLayerDefinition;
Importowanie eksportu MEF
Jeśli chcesz użyć eksportu MEF, musisz znać kontrakt (zazwyczaj typ), którym został wyeksportowany, i dodać atrybut ImportAttribute o tej wartości. Domyślnie atrybut importu przyjmuje jeden parametr, który jest typem klasy, którą modyfikuje. Następujące wiersze kodu importuje IClassificationTypeRegistryService typ.
[Import]
internal IClassificationTypeRegistryService ClassificationRegistry;
Rozwiązywanie problemów z importowaniem/eksportowaniem: uzyskiwanie dostępu do dziennika błędów kompozycji MEF
Problemy mogą wystąpić, jeśli spróbujesz zaimportować coś, co nie istnieje w bieżącej instalacji programu VS, lub jeśli niepoprawnie utworzysz import lub eksport. Podstawowym sposobem znalezienia i rozwiązania tych problemów jest odwołanie się do dziennika błędów kompozycji programu Managed Extensibility Framework (MEF) przechowywanego w %localappdata%\Microsoft\VisualStudio[yourVSVersion]\ComponentModelCache\Microsoft.VisualStudio.Default.err.
Pobieranie funkcji edytora z części składnika MEF
Jeśli istniejący kod jest częścią składnika MEF, możesz użyć metadanych MEF do korzystania z części składników edytora.
Aby korzystać z funkcji edytora z części składowej MEF
Dodaj odwołania do System.Composition.ComponentModel.dll, która znajduje się w globalnej pamięci podręcznej zestawów (GAC) i do zestawów edytora.
Dodaj odpowiednie dyrektywy using.
using System.ComponentModel.Composition; using Microsoft.VisualStudio.Text;Dodaj atrybut
[Import]do interfejsu swojej usługi w następujący sposób.[Import] ITextBufferFactoryService textBufferService;Po uzyskaniu usługi możesz użyć dowolnego z jego składników.
Po skompilowaniu zestawu umieść go w *.. Folder \Common7\IDE\Components* instalacji programu Visual Studio.