Condividi tramite


Procedura: registrare un servizio

Il framework gestito del pacchetto (MPF) fornisce attributi per controllare la registrazione dei servizi gestiti. l'utilità di RegPkg utilizza questi attributi per registrare un servizio con Visual Studio.

Esempio

il codice che segue proviene da Esempi di estensibilità di Visual Studio.

<DefaultRegistryRoot("Microsoft\VisualStudio\8.0Exp")> _
<PackageRegistration(UseManagedResourcesOnly:=True)> _
<ProvideService(GetType(SMyGlobalService))> _
<System.Runtime.InteropServices.Guid("d695001c-f46a-407b-a1c9-54c35ef8ce87")> _
Public NotInheritable Class ServicesPackage
    Inherits Package
[DefaultRegistryRoot(@"Microsoft\VisualStudio\8.0Exp")]
[PackageRegistration(UseManagedResourcesOnly = true)]
[ProvideService(typeof(SMyGlobalService))]
[System.Runtime.InteropServices.Guid("d695001c-f46a-407b-a1c9-54c35ef8ce87")]
public sealed class ServicesPackage : Package

ProvideServiceAttribute registra il servizio di SMyGlobalService con Visual Studio. Per ulteriori informazioni su DefaultRegistryRootAttribute e PackageRegistrationAttribute, vedere Procedura: registrare un VSPackage.

Programmazione efficiente

Per rendere più facile ricompilare un provider di servizi senza modificare il client del servizio, o viceversa, è possibile definire il servizio e le relative interfacce in un modulo di assembly separato. Il seguente codice presente nel file di IMyGlobalService.cs nell' esempio di Reference.Services (c#).

<Guid("fafafdfb-60f3-47e4-b38c-1bae05b44240")> _
Public Interface SMyGlobalService
End Interface

<Guid("ba9fe7a3-e216-424e-87f9-dee001228d03")> _
<ComVisible(True)> _
Public Interface IMyGlobalService
    Sub GlobalServiceFunction()
    Function CallLocalService() As Integer 
End Interface
[Guid("fafafdfb-60f3-47e4-b38c-1bae05b44240")]
public interface SMyGlobalService { }

[Guid("ba9fe7a3-e216-424e-87f9-dee001228d03")]
[ComVisible(true)]
public interface IMyGlobalService
{
    void GlobalServiceFunction();
    int CallLocalService();
}

ComVisibleAttribute è necessario ottenere l'interfaccia dal codice non gestito.

Nota

Sebbene sia possibile utilizzare lo stesso tipo o GUID del servizio che l'interfaccia, è consigliabile separare i due perché un servizio può esporre le interfacce differenti.

Vedere anche

Concetti

Concetti di base del servizio

Altre risorse

Registering VSPackages