providing-consuming-services

Register and consume Visual Studio IDE services across extension components.

14|2|Updated Mar 24, 2026
One-click install
npx skills add https://github.com/madskristensen/vs-agent-plugins --skill providing-consuming-services
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: providing-consuming-services
Source: https://github.com/madskristensen/vs-agent-plugins/tree/main/skills/providing-consuming-services
Command: npx skills add https://github.com/madskristensen/vs-agent-plugins --skill providing-consuming-services

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

This guidance helps extension authors share and consume Visual Studio IDE services across components, enabling decoupled, testable extensions and smoother integration with VS built-in services.

Core Features & Use Cases

  • Centralized service provisioning and consumption across commands, tool windows, and editors.
  • Access to built-in VS services (e.g., SVsSolution, SVsShell) from multiple extension parts.
  • Cross-model compatibility with VisualStudio.Extensibility, VSIX Community Toolkit, and VSSDK patterns.

Quick Start

Define your service, register it in InitializeServices, and inject it into extension components to enable sharing and consumption of Visual Studio services.

Frequently Asked Questions about providing-consuming-services

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I share state between Visual Studio extension commands, tool windows, and editors?

To share state across Visual Studio extension components, define a service contract with a marker type and interface, register it using InitializeServices or ProvideService, and consume it via constructor injection or async service queries to enable decoupled functionality.

Can I access built-in VS services like SVsSolution and SVsShell from a VisualStudio.Extensibility extension?

Yes, you can access built-in Visual Studio services like SVsSolution and SVsShell from VisualStudio.Extensibility extensions. This Skill guides provisioning and consuming these IDE services across multiple extension models including VSIX Community Toolkit and VSSDK.

What is the best way to use dependency injection for MEF-imported types in Visual Studio extensions?

Dependency injection for MEF-imported types in Visual Studio extensions is best handled by defining a service contract, registering it appropriately, and consuming it through constructor injection or async service queries to ensure cross-model compatibility and testable extensions.

How do I register a custom service in a VSIX Community Toolkit extension?

To register a custom service in a VSIX Community Toolkit extension, define your service contract, then use the ProvideService attribute for Toolkit/VSSDK patterns or InitializeServices for VisualStudio.Extensibility to provision it for consumption.

Does this approach to consuming VS services work across different extension models?

Yes, consuming Visual Studio services with this approach works across VisualStudio.Extensibility, VSIX Community Toolkit, and VSSDK patterns. It enables cross-model compatibility by defining a service contract and using consistent registration and injection techniques.

Why define a marker type and interface for Visual Studio extension services?

Defining a marker type and interface for Visual Studio extension services establishes a clear service contract. This enables decoupled, testable extensions by allowing components to consume services via constructor injection or async queries without tight coupling.