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
Altre risorse
Registering VSPackages