Bagikan melalui


Kerangka Kerja Ekstensibilitas Terkelola di editor

Editor dibangun dengan menggunakan komponen Managed Extensibility Framework (MEF). Anda dapat membangun komponen MEF Anda sendiri untuk memperluas editor, dan kode Anda juga dapat menggunakan komponen editor.

MEF adalah pustaka .NET yang memungkinkan Anda menambahkan dan memodifikasi fitur aplikasi atau komponen yang mengikuti model pemrograman MEF. Editor Visual Studio dapat menyediakan dan menggunakan komponen MEF.

MEF terkandung dalam rakitan .NET Framework versi 4 System.ComponentModel.Composition.dll .

Untuk mendapatkan informasi selengkapnya tentang MEF, lihat Managed Extensibility Framework (MEF).

Bagian komponen dan kontainer komposisi

Bagian komponen adalah kelas atau anggota kelas yang dapat melakukan satu (atau keduanya) dari hal berikut:

  • Mengonsumsi komponen lain

  • Dikonsumsi oleh komponen lain

    Misalnya, pertimbangkan aplikasi belanja yang memiliki komponen entri pesanan yang bergantung pada data ketersediaan produk yang disediakan oleh komponen inventori gudang. Dalam istilah MEF, bagian inventori dapat mengekspor data ketersediaan produk, dan bagian entri pesanan dapat mengimpor data. Bagian entri pesanan dan bagian inventori tidak perlu tahu satu sama lain; kontainer komposisi (disediakan oleh aplikasi host) bertanggung jawab untuk mempertahankan serangkaian ekspor, dan menyelesaikan ekspor dan impor.

    Kontainer komposisi, CompositionContainer, biasanya dimiliki oleh host. Kontainer komposisi mempertahankan katalog bagian komponen yang diekspor.

Bagian komponen ekspor dan impor

Anda dapat mengekspor fungsionalitas apa pun, selama diimplementasikan sebagai kelas publik atau anggota publik kelas (properti atau metode). Anda tidak perlu memperoleh bagian komponen Anda dari ComposablePart. Sebagai gantinya, Anda harus menambahkan ExportAttribute atribut ke anggota kelas atau kelas yang ingin Anda ekspor. Atribut ini menentukan kontrak tempat komponen lain dapat mengimpor fungsionalitas Anda.

Kontrak ekspor

menentukan ExportAttribute entitas (kelas, antarmuka, atau struktur) yang sedang diekspor. Biasanya, atribut ekspor mengambil parameter yang menentukan jenis ekspor.

[Export(typeof(ContentTypeDefinition))]
class TestContentTypeDefinition : ContentTypeDefinition {   }

Secara default, ExportAttribute atribut mendefinisikan kontrak yang merupakan jenis kelas ekspor.

[Export]
[Name("Structure")]
[Order(After = "Selection", Before = "Text")]
class TestAdornmentLayerDefinition : AdornmentLayerDefinition {   }

Dalam contoh, atribut default [Export] setara dengan [Export(typeof(TestAdornmentLayerDefinition))].

Anda juga dapat mengekspor properti atau metode, seperti yang ditunjukkan dalam contoh berikut.

[Export]
[Name("Scarlet")]
[Order(After = "Selection", Before = "Text")]
public AdornmentLayerDefinition scarletLayerDefinition;

Mengimpor Ekspor MEF

Ketika Anda ingin menggunakan ekspor MEF, Anda harus mengetahui kontrak (biasanya jenisnya) yang diekspor, dan menambahkan ImportAttribute atribut yang memiliki nilai tersebut. Secara default, atribut impor mengambil satu parameter, yang merupakan jenis kelas yang dimodifikasinya. Baris kode berikut mengimpor jenis.IClassificationTypeRegistryService

[Import]
internal IClassificationTypeRegistryService ClassificationRegistry;

Memecahkan Masalah Impor/Ekspor: Mengakses Log Kesalahan Komposisi MEF

Anda mungkin mengalami masalah jika mencoba mengimpor sesuatu yang tidak ada di penginstalan VS saat ini, atau jika Anda salah menulis impor atau ekspor Anda. Cara utama untuk menemukan dan mengatasi masalah ini adalah dengan mereferensikan Log Kesalahan Komposisi Managed Extensibility Framework (MEF), yang disimpan di %localappdata%\Microsoft\VisualStudio[yourVSVersion]\ComponentModelCache\Microsoft.VisualStudio.Default.err.

Mendapatkan fungsionalitas editor dari bagian komponen MEF

Jika kode yang ada adalah bagian komponen MEF, Anda dapat menggunakan metadata MEF untuk menggunakan komponen editor.

Untuk menggunakan fungsionalitas editor dari bagian komponen MEF

  1. Tambahkan referensi ke System.Composition.ComponentModel.dll, yang ada di cache perakitan global (GAC), dan ke rakitan editor.

  2. Tambahkan yang relevan menggunakan arahan.

    using System.ComponentModel.Composition;
    using Microsoft.VisualStudio.Text;
    
  3. Tambahkan atribut ke [Import] antarmuka layanan Anda, sebagai berikut.

    [Import]
    ITextBufferFactoryService textBufferService;
    
  4. Ketika Anda telah mendapatkan layanan, Anda dapat menggunakan salah satu komponennya.

  5. Ketika Anda telah mengkompilasi assembly Anda, masukkan ke dalam *.. Folder \Common7\IDE\Components* penginstalan Visual Studio Anda.