다음을 통해 공유


방법: 서비스를 제공 합니다.

있는 VSPackage 다른 Vspackages에서 사용할 수 있는 서비스를 제공할 수 있습니다. 서비스를 제공 하는 VSPackage 다음 작업을 수행 해야 합니다.

Package 클래스는 두 Iserviceprovider를 구현 하 고 IServiceContainer. IServiceContainer필요에 따라 로컬 및 전역 서비스를 제공할 수 있는 콜백 메서드를 포함 합니다.

참고

있는 VSPackage 정도 로드 될 때 Visual Studio Vspackage를 제공 하는 서비스에 대 한 모든 요청이 전달 되었을 때까지 기다립니다.이러한 서비스에 대 한 새 요청은 허용 하지 않습니다.따라서 VSPackages 명시적으로 호출 해야 하지는 RevokeService 언로드하는 경우 서비스를 해지 하는 방법입니다.

다음 코드는 Reference.Services 샘플 (C#)에서 찍은 있는 Visual Studio 확장성 샘플. 이 로컬 서비스, SMyLocalService, 및 SMyGlobalService 글로벌 서비스를 제공합니다.

서비스 제공을 위해

  1. 추가 ProvideServiceAttribute 글로벌 서비스를 제공 하 여 Vspackage를 합니다.

    <ProvideService(GetType(SMyGlobalService))> _
    Public NotInheritable Class ServicesPackage
        Inherits Package
    
    [ProvideService(typeof(SMyGlobalService))]
    public sealed class ServicesPackage : Package
    

    ProvideServiceAttributeregisters SMyGlobalService with Visual Studio. 글로벌 서비스만 등록 해야 합니다. 자세한 내용은 방법: 서비스 등록를 참조하십시오.

  2. 콜백 메서드를 만드는 서비스를 서비스 컨테이너에 추가 합니다.

    Public Sub New()
        Dim serviceContainer As IServiceContainer = TryCast(Me, IServiceContainer)
        Dim callback As New ServiceCreatorCallback(AddressOf CreateService)
        serviceContainer.AddService(GetType(SMyGlobalService), callback, True)
        serviceContainer.AddService(GetType(SMyLocalService), callback)
    End Sub
    
    public ServicesPackage()
    {
        IServiceContainer serviceContainer = this as IServiceContainer;
        ServiceCreatorCallback callback =
           new ServiceCreatorCallback(CreateService);
        serviceContainer.AddService(typeof(SMyGlobalService), callback, true);
        serviceContainer.AddService(typeof(SMyLocalService), callback);
    }
    

    true 플래그에 지시 하는 서비스 컨테이너 SMyGlobalService 글로벌 서비스입니다.

    참고

    Visual Studio서비스를 제공 하는 요청을 거부할 수 있습니다.다른 VSPackage 이미 서비스를 제공 하는 경우에 그렇게 하지 않습니다.

  3. 콜백 메서드를 구현 합니다.

    Private Function CreateService(ByVal container As IServiceContainer, ByVal serviceType As Type) As Object 
        If GetType(SMyGlobalService) Is serviceType Then 
            Return New MyGlobalService(Me)
        End If 
    
        If GetType(SMyLocalService) Is serviceType Then 
            Return New MyLocalService(Me)
        End If 
    End Function
    
    private object CreateService(IServiceContainer container, Type serviceType)
    {
        if (typeof(SMyGlobalService) == serviceType)
            return new MyGlobalService(this);
    
        if (typeof(SMyLocalService) == serviceType)
            return new MyLocalService(this);
    
        return null;
    }
    

    CreateService하나 만들고 SMyGlobalService 또는 SMyLocalService 시.

  4. 글로벌 서비스 클래스를 구현 합니다.

    Public Class MyGlobalService
        Inherits SMyGlobalService
        Implements IMyGlobalService
        Private serviceProvider As IServiceProvider
        Public Sub New(ByVal sp As IServiceProvider)
            Trace.WriteLine("Constructing a new instance of MyGlobalService")
            serviceProvider = sp
        End Sub 
        ' Implement the methods of IMyGlobalService here.  
    End Class
    
    public class MyGlobalService : SMyGlobalService, IMyGlobalService
    {
        private IServiceProvider serviceProvider;
        public MyGlobalService(IServiceProvider sp)
        {
            Trace.WriteLine(
               "Constructing a new instance of MyGlobalService");
            serviceProvider = sp;
        }
        // Implement the methods of IMyGlobalService here.
    }
    

    MyGlobalService 클래스를 모두 구현 SMyGlobalService 및 IMyGlobalInterface 이 서비스에서 제공 하는 인터페이스입니다. 생성자에 전달 하는 서비스 공급자는 인터페이스 메서드가 다른 서비스에 액세스할 수 있도록 캐시 됩니다.

  5. 로컬 서비스 클래스를 구현 합니다.

    Public Class MyLocalService
        Inherits SMyLocalService
        Implements IMyLocalService
        Private serviceProvider As IServiceProvider
        Public Sub New(ByVal sp As IServiceProvider)
            Trace.WriteLine("Constructing a new instance of MyLocalService")
            serviceProvider = sp
        End Sub 
        ' Implement the methods of IMyLocalService here.  
    End Class
    
    public class MyLocalService : SMyLocalService, IMyLocalService
    {
        private IServiceProvider serviceProvider;
        public MyLocalService(IServiceProvider sp)
        {
            Trace.WriteLine(
               "Constructing a new instance of MyLocalService");
            serviceProvider = sp;
        }
        // Implement the methods of IMyLocalService here.
    }
    

참고 항목

작업

방법: 서비스 사용

개념

Visual Studio 확장성 샘플

서비스 기초

기타 리소스

서비스