Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
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 .NET Framework w wersji 4 System.ComponentModel.Composition.dll .
Aby uzyskać więcej informacji na temat mef, zobacz Managed Extensibility Framework (MEF).
Części składowe i kontenery 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
Być używane przez inny składnik
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 część zapasów może eksportować dane dostępności produktu, a część wpisu zamówienia może importować dane. Część wpisu zamówienia i część spisu nie muszą się ze sobą znać; kontener kompozycji (dostarczony przez aplikację hosta) jest odpowiedzialny za utrzymanie zestawu eksportów oraz rozpoznawanie 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 pobierać części składnika z klasy ComposablePart. Zamiast tego należy dodać ExportAttribute atrybut do składowej klasy lub klasy, 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), za pomocą którego został wyeksportowany, i dodać ImportAttribute atrybut 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 zarządzanej struktury rozszerzalności (MEF), przechowywanego w folderze %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ładnika MEF
Dodaj odwołania do biblioteki 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 do interfejsu
[Import]
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.