Aracılığıyla paylaş


Dil hizmeti ve düzenleyici uzantı noktaları

Düzenleyici, çoğu dil hizmeti özelliği de dahil olmak üzere Yönetilen Genişletilebilirlik Çerçevesi (MEF) bileşen parçaları olarak genişletebileceğiniz uzantı noktaları sağlar. Ana uzantı noktası kategorileri şunlardır:

  • İçerik türleri

  • Sınıflandırma türleri ve sınıflandırma biçimleri

  • Kenar boşlukları ve kaydırma çubukları

  • Etiketler

  • Süsleme -leri

  • Fare işlemcileri

  • İşleyicileri bırakma

  • Seçenekler

  • IntelliSense

İçerik türlerini genişletme

İçerik türleri, düzenleyici tarafından işlenen metin türlerinin tanımlarıdır; örneğin, "text", "code" veya "CSharp". Türün değişkenini bildirerek ve yeni içerik türüne ContentTypeDefinition benzersiz bir ad vererek yeni bir içerik türü tanımlarsınız. İçerik türünü düzenleyiciye kaydetmek için aşağıdaki özniteliklerle birlikte dışarı aktarın:

  • NameAttribute , içerik türünün adıdır.

  • BaseDefinitionAttribute , bu içerik türünün türetildiği içerik türünün adıdır. bir içerik türü birden çok diğer içerik türünden devralabilir.

    ContentTypeDefinition Sınıf korumalı olduğundan, bunu tür parametresi olmadan dışarı aktarabilirsiniz.

    Aşağıdaki örnekte, bir içerik türü tanımındaki dışarı aktarma öznitelikleri gösterilmektedir.

[Export]
[Name("test")]
[BaseDefinition("code")]
[BaseDefinition("projection")]
internal static ContentTypeDefinition TestContentTypeDefinition;

İçerik türleri sıfır veya daha fazla önceden var olan içerik türünü temel alabilir. Yerleşik türler şunlardır:

  • Herhangi biri: temel içerik türü. Diğer tüm içerik türlerinin üst öğesi.

  • Metin: Projeksiyon olmayan içerik için temel tür. "any" öğesinden devralır.

  • Düz metin: kod olmayan metinler için. "Metin" öğesinden devralır.

  • Kod: her türlü kod için. "Metin" öğesinden devralır.

  • Eylemsiz: Metni herhangi bir işleme türünün dışında tutar. Bu içerik türünün metnine hiçbir zaman uzantı uygulanmaz.

  • Projeksiyon: projeksiyon arabelleklerinin içeriği için. "any" öğesinden devralır.

  • IntelliSense: IntelliSense içeriği için. "Metin" öğesinden devralır.

  • Sighelp: imza yardımı. "intellisense" öğesini devralır.

  • Sighelp-doc: imza yardımı belgeleri. "intellisense" öğesini devralır.

    Visual Studio tarafından tanımlanan içerik türlerinden bazıları ve Visual Studio'da barındırılan dillerden bazıları şunlardır:

  • Temel

  • C/C++

  • ConsoleOutput

  • CSharp

  • CSS

  • ENC

  • FindResults

  • F#

  • HTML

  • JScript

  • XAML

  • XML

    Kullanılabilir içerik türlerinin listesini bulmak için, düzenleyicinin IContentTypeRegistryServiceiçerik türleri koleksiyonunu koruyan öğesini içeri aktarın. Aşağıdaki kod bu hizmeti bir özellik olarak içeri aktarır.

[Import]
internal IContentTypeRegistryService ContentTypeRegistryService { get; set; }

İçerik türünü dosya adı uzantısıyla ilişkilendirmek için kullanın FileExtensionToContentTypeDefinition.

Not

Visual Studio'da, dosya adı uzantıları bir dil hizmeti paketinde kullanılarak ProvideLanguageExtensionAttribute kaydedilir. , FileExtensionToContentTypeDefinition bir MEF içerik türünü bu şekilde kaydedilmiş bir dosya adı uzantısıyla ilişkilendirir.

Dosya adı uzantısını içerik türü tanımına aktarmak için aşağıdaki öznitelikleri eklemeniz gerekir:

[Export]
[FileExtension(".test")]
[ContentType("test")]
internal static FileExtensionToContentTypeDefinition TestFileExtensionDefinition;

, IFileExtensionRegistryService dosya adı uzantıları ve içerik türleri arasındaki ilişkilendirmeleri yönetir.

Sınıflandırma türlerini ve sınıflandırma biçimlerini genişletme

Farklı işleme sağlamak istediğiniz metin türlerini tanımlamak için sınıflandırma türlerini kullanabilirsiniz (örneğin, "anahtar sözcük" metnini mavi ve "açıklama" metnini yeşil renklendirme). Türünde bir değişken bildirerek ve benzersiz bir ad vererek yeni bir sınıflandırma türü ClassificationTypeDefinition tanımlayın.

Sınıflandırma türünü düzenleyiciye kaydetmek için aşağıdaki özniteliklerle birlikte dışarı aktarın:

  • NameAttribute: sınıflandırma türünün adı.

  • BaseDefinitionAttribute: Bu sınıflandırma türünün devraldığı sınıflandırma türünün adı. Tüm sınıflandırma türleri "metinden" devralır ve bir sınıflandırma türü diğer birden çok sınıflandırma türünden devralabilir.

    ClassificationTypeDefinition Sınıf korumalı olduğundan, bunu tür parametresi olmadan dışarı aktarabilirsiniz.

    Aşağıdaki örnekte sınıflandırma türü tanımındaki dışarı aktarma öznitelikleri gösterilmektedir.

[Export]
[Name("csharp.test")]
[BaseDefinition("test")]
internal static ClassificationTypeDefinition CSharpTestDefinition;

standart IStandardClassificationService sınıflandırmalara erişim sağlar. Yerleşik sınıflandırma türleri şunlardır:

  • "metin"

  • "doğal dil" ("metinden türetilir")

  • "resmi dil" ("metinden" türetilir)

  • "string" ("değişmez değerden" türetilir)

  • "character" ("değişmez değerden" türetilir)

  • "sayısal" ("değişmez değerden" türetilir)

    'den ErrorTypeDefinitiondevralınan farklı hata türleri kümesi. Bunlar aşağıdaki hata türlerini içerir:

  • "söz dizimi hatası"

  • "derleyici hatası"

  • "diğer hata"

  • "uyarı"

    Kullanılabilir sınıflandırma türlerinin listesini bulmak için, düzenleyici için sınıflandırma türleri koleksiyonunu koruyan öğesini içeri aktarın IClassificationTypeRegistryService. Aşağıdaki kod bu hizmeti bir özellik olarak içeri aktarır.

[Import]
internal IClassificationTypeRegistryService ClassificationTypeRegistryService { get; set; }

Yeni sınıflandırma türünüz için bir sınıflandırma biçimi tanımı tanımlayabilirsiniz. sınıfından ClassificationFormatDefinition bir sınıf türetin ve aşağıdaki özniteliklerle birlikte türüyle EditorFormatDefinitiondışarı aktarın:

[Export(typeof(EditorFormatDefinition))]
[ClassificationType(ClassificationTypeNames = "test")]
[Name("test")]
[DisplayName("Test")]
[UserVisible(true)]
[Order(After = Priority.Default, Before = Priority.High)]
internal sealed class TestFormat : ClassificationFormatDefinition

Kullanılabilir biçimlerin listesini bulmak için, düzenleyicinin IEditorFormatMapServicebiçim koleksiyonunu koruyan öğesini içeri aktarın. Aşağıdaki kod bu hizmeti bir özellik olarak içeri aktarır.

[Import]
internal IEditorFormatMapService FormatMapService { get; set; }

Kenar boşluklarını ve kaydırma çubuklarını genişletme

Kenar boşlukları ve kaydırma çubukları, metin görünümünün kendisine ek olarak düzenleyicinin ana görünüm öğeleridir. Metin görünümünün çevresinde görünen standart kenar boşluklarına ek olarak istediğiniz sayıda kenar boşluğu sağlayabilirsiniz.

Kenar boşluğu tanımlamak için bir IWpfTextViewMargin arabirim uygulayın. Kenar boşluğu oluşturmak için arabirimini de uygulamanız IWpfTextViewMarginProvider gerekir.

Kenar boşluğu sağlayıcısını düzenleyiciye kaydetmek için sağlayıcıyı aşağıdaki özniteliklerle birlikte dışarı aktarmanız gerekir:

  • NameAttribute: kenar boşluğunun adı.

  • OrderAttribute: diğer kenar boşluklarına göre kenar boşluğunun görüntülendiği sıra.

    Yerleşik kenar boşlukları şunlardır:

    • "Wpf Yatay Kaydırma Çubuğu"

    • "Wpf Dikey Kaydırma Çubuğu"

    • "Wpf Satır Numarası Kenar Boşluğu"

      Order özniteliğine After="Wpf Horizontal Scrollbar" sahip yatay kenar boşlukları yerleşik kenar boşluğunun altında, order özniteliğine Before ="Wpf Horizontal Scrollbar" sahip yatay kenar boşlukları ise yerleşik kenar boşluğunun üzerinde görüntülenir. Order özniteliğine After="Wpf Vertical Scrollbar" sahip sağ dikey kenar boşlukları kaydırma çubuğunun sağ kısmında görüntülenir. Order özniteliğine After="Wpf Line Number Margin" sahip sol dikey kenar boşlukları, satır numarası kenar boşluğunun solunda görünür (görünüyorsa).

  • MarginContainerAttribute: kenar boşluğunun türü (sol, sağ, üst veya alt).

  • ContentTypeAttribute: kenar boşluğunuzun geçerli olduğu içerik türü (örneğin, "metin" veya "kod").

    Aşağıdaki örnekte, satır numarası kenar boşluğunun sağ tarafında görünen bir kenar boşluğu için kenar boşluğu sağlayıcısındaki dışarı aktarma öznitelikleri gösterilmektedir.

[Export(typeof(IWpfTextViewMarginProvider))]
[Name("TestMargin")]
[Order(Before = "Wpf Line Number Margin")]
[MarginContainer(PredefinedMarginNames.Left)]
[ContentType("text")]

Etiketleri genişletme

Etiketler, verileri farklı metin türleriyle ilişkilendirmenin bir yoludur. Çoğu durumda, ilişkili veriler görsel efekt olarak görüntülenir, ancak tüm etiketlerin görsel bir sunusu yoktur. uygulayarak ITagkendi etiket türünüzü tanımlayabilirsiniz. Ayrıca, belirli bir metin aralığı kümesinin etiketlerini sağlamak için ve etiketleyiciyi sağlamak için de uygulamanız ITagger<T>ITaggerProvider gerekir. Aşağıdaki özniteliklerle birlikte etiketleme sağlayıcısını dışarı aktarmanız gerekir:

  • ContentTypeAttribute: etiketinizin geçerli olduğu içerik türü (örneğin, "metin" veya "kod").

  • TagTypeAttribute: etiket türü.

    Aşağıdaki örnekte, bir etiketleme sağlayıcısındaki dışarı aktarma öznitelikleri gösterilmektedir.

<CodeContentPlaceHolder>8 Aşağıdaki etiket türleri yerleşiktir:

[Import]
internal IViewTagAggregatorFactoryService ViewTagAggregatorFactoryService { get; set; }

Etiketler ve MarkerFormatDefinitions

Bir etiketin MarkerFormatDefinition görünümünü tanımlamak için sınıfını genişletebilirsiniz. Sınıfınızı (olarak EditorFormatDefinition) aşağıdaki özniteliklerle dışarı aktarmanız gerekir:

  • NameAttribute: Bu biçime başvurmak için kullanılan ad

  • UserVisibleAttribute: bu, biçimin kullanıcı arabiriminde görünmesine neden olur

    Oluşturucuda, etiketin görünen adını ve görünümünü tanımlarsınız. BackgroundColor dolgu rengini ve ForegroundColor kenarlık rengini tanımlar. DisplayName, biçim tanımının yerelleştirilebilir adıdır.

    Aşağıda bir biçim tanımı örneği verilmiştir:

[Export(typeof(EditorFormatDefinition))]
[Name("MarkerFormatDefinition/HighlightWordFormatDefinition")]
[UserVisible(true)]
internal class HighlightWordFormatDefinition : MarkerFormatDefinition
{
    public HighlightWordFormatDefinition()
    {
        this.BackgroundColor = Colors.LightBlue;
        this.ForegroundColor = Colors.DarkBlue;
        this.DisplayName = "Highlight Word";
        this.ZOrder = 5;
    }
}

Bu biçim tanımını bir etikete uygulamak için sınıfın name özniteliğinde ayarladığınız ada (görünen ada değil) başvurun.

Not

örneği MarkerFormatDefinitioniçin İzlenecek Yol: Metni Vurgulama'daki HighlightWordFormatDefinition sınıfına bakın.

Süslemeleri genişletme

Kenarlıklar, metin görünümünde görüntülenen metne veya metin görünümünün kendisine eklenebilen görsel efektleri tanımlar. Kendi süslemenizi herhangi bir tür UIElementolarak tanımlayabilirsiniz.

Donatma sınıfınızda bir AdornmentLayerDefinitionbildirmeniz gerekir. Donatma katmanınızı kaydetmek için aşağıdaki özniteliklerle birlikte dışarı aktarın:

  • NameAttribute: süslemenin adı.

  • OrderAttribute: diğer süsleme katmanlarına göre süslemenin sıralanması. sınıfı PredefinedAdornmentLayers dört varsayılan katmanı tanımlar: Seçim, Ana Hat Oluşturma, Şapka İşareti ve Metin.

    Aşağıdaki örnekte, bir donatma katmanı tanımındaki dışarı aktarma öznitelikleri gösterilmektedir.

[Export]
[Name("TestEmbeddedAdornment")]
[Order(After = PredefinedAdornmentLayers.Selection, Before = PredefinedAdornmentLayers.Text)]
internal AdornmentLayerDefinition testLayerDefinition;

Donatma örneğini oluşturarak olayını uygulayan IWpfTextViewCreationListener ve işleyen TextViewCreated ikinci bir sınıf oluşturmanız gerekir. Bu sınıfı aşağıdaki özniteliklerle birlikte dışarı aktarmanız gerekir:

  • ContentTypeAttribute: süslemenin geçerli olduğu içerik türü (örneğin, "metin" veya "kod").

  • TextViewRoleAttribute: bu süslemenin geçerli olduğu metin görünümünün türü. sınıfı PredefinedTextViewRoles , önceden tanımlanmış metin görünümü rolleri kümesine sahiptir. Örneğin, Document öncelikli olarak dosyaların metin görünümleri için kullanılır. Interactive , kullanıcının fare ve klavye kullanarak düzenleyebileceği veya gezinebileceği metin görünümleri için kullanılır. Görünümlere örnek olarak Interactive düzenleyici metin görünümü ve Çıkış penceresi verilebilir.

    Aşağıdaki örnekte, donatma sağlayıcısındaki dışarı aktarma öznitelikleri gösterilmektedir.

[Export(typeof(IWpfTextViewCreationListener))]
[ContentType("csharp")]
[TextViewRole(PredefinedTextViewRoles.Document)]
internal sealed class TestAdornmentProvider : IWpfTextViewCreationListener

Boşluk anlaşması, metinle aynı düzeyde alan kaplayan bir kenarlıktır. Bu tür bir donatma oluşturmak için, öğesinden SpaceNegotiatingAdornmentTagdevralan, süslemenin kapladığı alan miktarını tanımlayan bir etiket sınıfı tanımlamanız gerekir.

Tüm süslemelerde olduğu gibi, donatma katmanı tanımını dışarı aktarmanız gerekir.

[Export]
[Name("TestAdornment")]
[Order(After = DefaultAdornmentLayers.Text)]
internal AdornmentLayerDefinition testAdornmentLayer;

Alan anlaşması süslemesinin örneğini oluşturmak için uygulayan ITaggerProvidersınıfa ek olarak uygulayan IWpfTextViewCreationListener bir sınıf oluşturmanız gerekir (diğer türlerde olduğu gibi).

Etiketleme sağlayıcısını kaydetmek için aşağıdaki özniteliklerle birlikte dışarı aktarmanız gerekir:

  • ContentTypeAttribute: donatmanızın geçerli olduğu içerik türü (örneğin, "metin" veya "kod").

  • TextViewRoleAttribute: bu etiketin veya süslemenin geçerli olduğu metin görünümü türü. sınıfı PredefinedTextViewRoles , önceden tanımlanmış metin görünümü rolleri kümesine sahiptir. Örneğin, Document öncelikli olarak dosyaların metin görünümleri için kullanılır. Interactive , kullanıcının fare ve klavye kullanarak düzenleyebileceği veya gezinebileceği metin görünümleri için kullanılır. Görünümlere örnek olarak Interactive düzenleyici metin görünümü ve Çıkış penceresi verilebilir.

  • TagTypeAttribute: tanımladığınız etiket veya süsleme türü. için SpaceNegotiatingAdornmentTagbir saniye TagTypeAttribute eklemeniz gerekir.

    Aşağıdaki örnekte, alan anlaşması yapılan bir donatma etiketi için etiketleme sağlayıcısındaki dışarı aktarma öznitelikleri gösterilmektedir.

[Export(typeof(ITaggerProvider))]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Document)]
[TagType(typeof(SpaceNegotiatingAdornmentTag))]
[TagType(typeof(TestSpaceNegotiatingTag))]
internal sealed class TestTaggerProvider : ITaggerProvider

Fare İşlemcilerini Genişletme

Fare girişi için özel işleme ekleyebilirsiniz. öğesinden MouseProcessorBase devralan bir sınıf oluşturun ve işlemek istediğiniz giriş için fare olaylarını geçersiz kılın. Ayrıca ikinci bir sınıfta uygulamalı IMouseProcessorProvider ve fare işleyicinizin geçerli olduğu içerik türünü ("metin" veya "kod") belirten ile ContentTypeAttribute birlikte dışarı aktarmalısınız.

Aşağıdaki örnekte, bir fare işlemci sağlayıcısındaki dışarı aktarma öznitelikleri gösterilmektedir.

[Export(typeof(IMouseProcessorProvider))]
[Name("test mouse processor")]
[ContentType("text")]
[TextViewRole(PredefinedTextViewRoles.Interactive)]
internal sealed class TestMouseProcessorProvider : IMouseProcessorProvider

Bırakma işleyicilerini genişletme

Uygulayan bir sınıf ve bırakma işleyicisini oluşturmak için uygulayan ikinci bir sınıf IDropHandler oluşturarak belirli metin türleri için bırakma işleyicilerinin IDropHandlerProvider davranışını özelleştirebilirsiniz. Bırakma işleyicisini aşağıdaki özniteliklerle birlikte dışarı aktarmanız gerekir:

  • DropFormatAttribute: Bu bırakma işleyicisinin geçerli olduğu metin biçimi. Aşağıdaki biçimler en yüksekten en düşüğe öncelik sırasına göre işlenir:

    1. Herhangi bir özel biçim

    2. Filedrop

    3. EnhancedMetafile

    4. Waveaudio

    5. Rıff

    6. Dıf

    7. Yerel ayar

    8. Palet

    9. PenData

    10. Serileştirilebilir

    11. SymbolicLink

    12. Xaml

    13. XamlPackage

    14. Tıff

    15. Bitmap

    16. Dıb

    17. Meta DosyasıPicture

    18. CSV

    19. System

    20. HTML Biçimi

    21. Unicodetext

    22. OEMText

    23. Metin

  • NameAttribute: bırakma işleyicisinin adı.

  • OrderAttribute: Bırakma işleyicisinin varsayılan bırakma işleyicisi öncesinde veya sonrasında sıralanması. Visual Studio için varsayılan bırakma işleyicisi "DefaultFileDropHandler" olarak adlandırılır.

    Aşağıdaki örnekte, bırakma işleyici sağlayıcısındaki dışarı aktarma öznitelikleri gösterilmektedir.

[Export(typeof(IDropHandlerProvider))]
[DropFormat("Text")]
[Name("TestDropHandler")]
[Order(Before="DefaultFileDropHandler")]
internal class TestDropHandlerProvider : IDropHandlerProvider

Düzenleyici Seçeneklerini Genişletme

Yalnızca belirli bir kapsamda, örneğin metin görünümünde geçerli olacak seçenekler tanımlayabilirsiniz. Düzenleyici önceden tanımlanmış bu seçenekler kümesini sağlar: düzenleyici seçenekleri, görünüm seçenekleri ve Windows Presentation Foundation (WPF) görünüm seçenekleri. Bu seçenekler , DefaultTextViewOptionsve DefaultWpfViewOptionsiçinde DefaultOptionsbulunabilir.

Yeni bir seçenek eklemek için şu seçenek tanımı sınıflarından birinden bir sınıf türetin:

[Export(typeof(EditorOptionDefinition))]
internal sealed class TestOption : EditorOptionDefinition<bool>

IntelliSense'i genişletme

IntelliSense, yapılandırılmış metin ve bunun için deyim tamamlama hakkında bilgi sağlayan bir özellik grubu için genel bir terimdir. Bu özellikler arasında deyim tamamlama, imza yardımı, Hızlı Bilgi ve ampuller bulunur. Deyim tamamlama, kullanıcıların bir dil anahtar sözcüğünü veya üye adını doğru yazmalarını sağlar. İmza yardımı, kullanıcının yeni yazdığı yöntemin imzasını veya imzalarını görüntüler. Hızlı Bilgi, fare üzerine geldiğinde bir tür veya üye adı için tam imza görüntüler. Ampul, belirli bağlamlardaki belirli tanımlayıcılar için ek eylemler sağlar. Örneğin, bir yineleme yeniden adlandırıldıktan sonra bir değişkenin tüm oluşumlarını yeniden adlandırma.

IntelliSense özelliğinin tasarımı her durumda çok aynıdır:

  • IntelliSense aracısı genel işlemden sorumludur.

  • IntelliSense oturumu , sunucunun tetiklenmesi ile seçimin committal veya iptali arasındaki olayların sırasını temsil eder. Oturum genellikle bazı kullanıcı hareketleri tarafından tetikleniyor.

  • IntelliSense denetleyicisi , oturumun ne zaman başlaması ve bitmesi gerektiğine karar vermekle sorumludur. Ayrıca bilgilerin ne zaman işlenmesi gerektiğine ve oturumun ne zaman iptal edilmesi gerektiğine de karar verir.

  • IntelliSense kaynağı içeriği sağlar ve en iyi eşleşmeye karar verir.

  • İçeriği görüntülemek IntelliSense sunucusu tarafından sorumludur.

    Çoğu durumda, en az bir kaynak ve denetleyici sağlamanızı öneririz. Ayrıca, ekranı özelleştirmek istiyorsanız bir sunucu da sağlayabilirsiniz.

IntelliSense Kaynağı Uygulama

Bir kaynağı özelleştirmek için aşağıdaki kaynak arabirimlerinden birini (veya daha fazlasını) uygulamanız gerekir:

Önemli

ISmartTagSource yerine kullanım dışı bırakılmıştır ISuggestedActionsSource.

Ayrıca, aynı türde bir sağlayıcı uygulamanız gerekir:

Önemli

ISmartTagSourceProvider yerine kullanım dışı bırakılmıştır ISuggestedActionsSourceProvider.

Sağlayıcıyı aşağıdaki özniteliklerle birlikte dışarı aktarmanız gerekir:

  • NameAttribute: kaynağın adı.

  • ContentTypeAttribute: kaynağın geçerli olduğu içerik türü (örneğin, "metin" veya "kod").

  • OrderAttribute: kaynağın görünme sırası (diğer kaynaklara göre).

  • Aşağıdaki örnekte, bir tamamlama kaynağı sağlayıcısındaki dışarı aktarma öznitelikleri gösterilmektedir.

Export(typeof(ICompletionSourceProvider))]
[Name(" Test Statement Completion Provider")]
[Order(Before = "default")]
[ContentType("text")]
internal class TestCompletionSourceProvider : ICompletionSourceProvider

IntelliSense kaynaklarını uygulama hakkında daha fazla bilgi için aşağıdaki kılavuzlara bakın:

IntelliSense denetleyicisi uygulama

Denetleyiciyi özelleştirmek için arabirimini IIntellisenseController uygulamanız gerekir. Ayrıca, aşağıdaki özniteliklerle birlikte bir denetleyici sağlayıcısı uygulamanız gerekir:

  • NameAttribute: denetleyicinin adı.

  • ContentTypeAttribute: denetleyicinin geçerli olduğu içerik türü (örneğin, "metin" veya "kod").

  • OrderAttribute: denetleyicinin görünme sırası (diğer denetleyicilere göre).

    Aşağıdaki örnekte, bir tamamlama denetleyicisi sağlayıcısındaki dışarı aktarma öznitelikleri gösterilmektedir.

Export(typeof(IIntellisenseControllerProvider))]
[Name(" Test Controller Provider")]
[Order(Before = "default")]
[ContentType("text")]
internal class TestIntellisenseControllerProvider : IIntellisenseControllerProvider

IntelliSense denetleyicilerini kullanma hakkında daha fazla bilgi için aşağıdaki kılavuzlara bakın: