Hizmet alma

Farklı özelliklere erişmek için genellikle Visual Studio hizmetlerini almanız gerekir. Genel olarak, Visual Studio hizmeti kullanabileceğiniz bir veya daha fazla arabirim sağlar. Çoğu hizmeti bir VSPackage'dan alabilirsiniz.

Ve'den Package türetilen ve doğru şekilde sitelenmiş tüm VSPackage'lar herhangi bir genel hizmeti isteyebilir. Package sınıfı tarafından uygulandığındanIServiceProvider, öğesinden Package türetilen tüm VSPackage'lar da bir hizmet sağlayıcısıdır.

Visual Studio bir Packageyüklediğinde, başlatma sırasında yöntemine SetSite bir IServiceProvider nesnesi geçirir. Buna VSPackage'ın oturması denir. Package sınıfı bu hizmet sağlayıcısını GetService sarmalar ve hizmetleri almak için yöntemini sağlar.

Başlatılan bir VSPackage'dan hizmet alma

  1. Her Visual Studio uzantısı, uzantı varlıklarını içeren bir VSIX dağıtım projesiyle başlar. adlı GetServiceExtensionbir Visual Studio VSIX projesi oluşturun. "vsix" araması yaparak VSIX proje şablonunu Yeni Proje iletişim kutusunda bulabilirsiniz.

  2. Şimdi GetServiceCommand adlı özel bir komut öğesi şablonu ekleyin. Yeni Öğe Ekle iletişim kutusunda Visual C#>Genişletilebilirlik'e gidin ve Özel Komut'a tıklayın. Pencerenin en altındaki Ad alanında, komut dosyası adını GetServiceCommand.cs olarak değiştirin. Özel komut oluşturma hakkında daha fazla bilgi için, Menü komutuyla uzantı oluşturma

  3. GetServiceCommand.cs dosyasında yönteminin MenuItemCommand gövdesini kaldırın ve aşağıdaki kodu ekleyin:

    IVsActivityLog activityLog = ServiceProvider.GetService(typeof(SVsActivityLog)) as IVsActivityLog;
    if (activityLog == null) return;
    System.Windows.Forms.MessageBox.Show("Found the activity log service.");
    
    

    Bu kod bir SVsActivityLog hizmeti alır ve bunu etkinlik günlüğüne yazmak için kullanılabilecek bir IVsActivityLog arabirime yayınlar. Örnek için bkz . Nasıl yapılır: Etkinlik günlüğünü kullanma.

  4. Projeyi derleyin ve hata ayıklamaya başlayın. Deneysel örnek görüntülenir.

  5. Deneysel örneğin Araçlar menüsünde GetServiceCommand'ı Çağır düğmesini bulun. Bu düğmeye tıkladığınızda, Etkinlik günlüğü hizmeti bulundu ifadesini içeren bir ileti kutusu görmeniz gerekir.

Araç penceresinden veya denetim kapsayıcısından hizmet alma

Bazen bir araç penceresinden veya sitelendirilmemiş veya istediğiniz hizmet hakkında bilgi sahibi olmayan bir hizmet sağlayıcısıyla sitelenmiş olan bir denetim kapsayıcısından hizmet almanız gerekebilir. Örneğin, bir denetimin içinden etkinlik günlüğüne yazmak isteyebilirsiniz.

Statik GetGlobalService yöntem, konumundan türetilen herhangi bir VSPackage ilk kez başlatıldığında başlatılan önbelleğe alınmış bir hizmet sağlayıcısına Package dayanır.

VSPackage oluşturucu, VSPackage sitelendirilmeden önce çağrıldığından, genel hizmetler genellikle VSPackage oluşturucusunun içinden kullanılamaz. Geçici çözüm için bkz . Nasıl yapılır: Hizmetlerle ilgili sorunları giderme.

Bir araç penceresinde veya VSPackage olmayan başka bir öğede hizmet alma yöntemine bir örnek aşağıda verilmiştir.

IVsActivityLog log = Package.GetGlobalService(typeof(SVsActivityLog)) as IVsActivityLog;
if (log == null) return;

DTE nesnesinden hizmet alma

Ayrıca nesneden DTEClass de hizmet alabilirsiniz. Ancak, DTE nesnesini bir VSPackage'dan veya statik GetGlobalService yöntemi çağırarak hizmet olarak almanız gerekir.

DTE nesnesi, kullanarak GetServicebir hizmeti sorgulamak için kullanabileceğiniz öğesini uygularIServiceProvider.

DTE nesnesinden hizmet alma burada anlatılır.

// Start with the DTE object, for example: 
// using EnvDTE;
// DTE dte = (DTE)GetService(typeof(DTE));

ServiceProvider sp = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)dte);
if (sp != null)
{
    IVsActivityLog log = sp.GetService(typeof(SVsActivityLog)) as IVsActivityLog;
    if (log != null)
    {
        System.Windows.Forms.MessageBox.Show("Found the activity log service.");
    }
}