# AspireWebPubSubExtensions Methods

- Package: [Aspire.Azure.Messaging.WebPubSub](/reference/api/csharp/aspire.azure.messaging.webpubsub.md)
- Type: [AspireWebPubSubExtensions](/reference/api/csharp/aspire.azure.messaging.webpubsub/aspirewebpubsubextensions.md)
- Kind: `Methods`
- Members: `3`

Provides extension methods for registering `WebPubSub.WebPubSubServiceClient` as a singleton in the services provided by the `Hosting.IHostApplicationBuilder`.

## AddAzureWebPubSubServiceClient(IHostApplicationBuilder, string, Action<AzureMessagingWebPubSubSettings>, Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>)

- Name: `AddAzureWebPubSubServiceClient(IHostApplicationBuilder, string, Action<AzureMessagingWebPubSubSettings>, Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>)`
- Modifiers: `extension`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/5bd693ae1897dee5e2ce71c2cc08879c1c7eff51/src/Components/Aspire.Azure.Messaging.WebPubSub/AspireWebPubSubExtensions.cs#L39-L43)

Registers `WebPubSub.WebPubSubServiceClient` as a singleton in the services provided by the `builder`.

```csharp
public static class AspireWebPubSubExtensions
{
    public static void AddAzureWebPubSubServiceClient(
        this IHostApplicationBuilder builder,
        string connectionName,
        Action<AzureMessagingWebPubSubSettings>? configureSettings = null,
        Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>? configureClientBuilder = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IHostApplicationBuilder`)
  The `Hosting.IHostApplicationBuilder` to read config from and add services to.
- `connectionName` (`string`)
  A name used to retrieve the connection string from the ConnectionStrings configuration section.
- `configureSettings` (`Action<AzureMessagingWebPubSubSettings>`) `optional`
  An optional method that can be used for customizing the [AzureMessagingWebPubSubSettings](/reference/api/csharp/aspire.azure.messaging.webpubsub/azuremessagingwebpubsubsettings.md). It's invoked after the settings are read from the configuration.
- `configureClientBuilder` (`Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>`) `optional`
  An optional method that can be used for customizing the `Extensions.IAzureClientBuilder`2`.

## Exceptions

- `InvalidOperationException` -- Thrown when neither [AzureMessagingWebPubSubSettings.ConnectionString](/reference/api/csharp/aspire.azure.messaging.webpubsub/azuremessagingwebpubsubsettings/properties.md#connectionstring) nor [AzureMessagingWebPubSubSettings.Endpoint](/reference/api/csharp/aspire.azure.messaging.webpubsub/azuremessagingwebpubsubsettings/properties.md#endpoint) is provided.

## Remarks

Reads the configuration from "Aspire.Azure.Messaging.WebPubSub" section.

## AddKeyedAzureWebPubSubServiceClient(IHostApplicationBuilder, string, string, Action<AzureMessagingWebPubSubSettings>, Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>)

- Name: `AddKeyedAzureWebPubSubServiceClient(IHostApplicationBuilder, string, string, Action<AzureMessagingWebPubSubSettings>, Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>)`
- Modifiers: `extension`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/5bd693ae1897dee5e2ce71c2cc08879c1c7eff51/src/Components/Aspire.Azure.Messaging.WebPubSub/AspireWebPubSubExtensions.cs#L62-L75)

Registers `WebPubSub.WebPubSubServiceClient` as a singleton for given `connectionName` and `serviceKey` in the services provided by the `builder`.

```csharp
public static class AspireWebPubSubExtensions
{
    public static void AddKeyedAzureWebPubSubServiceClient(
        this IHostApplicationBuilder builder,
        string connectionName,
        string serviceKey,
        Action<AzureMessagingWebPubSubSettings>? configureSettings = null,
        Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>? configureClientBuilder = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IHostApplicationBuilder`)
  The `Hosting.IHostApplicationBuilder` to read config from and add services to.
- `connectionName` (`string`)
  The name of the component to retrieve the connection string from the ConnectionStrings configuration section.
- `serviceKey` (`string`)
  The name of the component, which is used as the `ServiceDescriptor.ServiceKey` of the service, as well as the hub name is hub name is not set in the settings
- `configureSettings` (`Action<AzureMessagingWebPubSubSettings>`) `optional`
  An optional method that can be used for customizing the [AzureMessagingWebPubSubSettings](/reference/api/csharp/aspire.azure.messaging.webpubsub/azuremessagingwebpubsubsettings.md). It's invoked after the settings are read from the configuration.
- `configureClientBuilder` (`Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>`) `optional`
  An optional method that can be used for customizing the `Extensions.IAzureClientBuilder`2`.

## Exceptions

- `InvalidOperationException` -- Thrown when neither [AzureMessagingWebPubSubSettings.ConnectionString](/reference/api/csharp/aspire.azure.messaging.webpubsub/azuremessagingwebpubsubsettings/properties.md#connectionstring) nor [AzureMessagingWebPubSubSettings.Endpoint](/reference/api/csharp/aspire.azure.messaging.webpubsub/azuremessagingwebpubsubsettings/properties.md#endpoint) is provided.

## Remarks

Reads the configuration from "Aspire.Azure.Messaging.WebPubSub:{name}" section.

## AddKeyedAzureWebPubSubServiceClient(IHostApplicationBuilder, string, Action<AzureMessagingWebPubSubSettings>, Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>)

- Name: `AddKeyedAzureWebPubSubServiceClient(IHostApplicationBuilder, string, Action<AzureMessagingWebPubSubSettings>, Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>)`
- Modifiers: `extension`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/5bd693ae1897dee5e2ce71c2cc08879c1c7eff51/src/Components/Aspire.Azure.Messaging.WebPubSub/AspireWebPubSubExtensions.cs#L94-L98)

Registers `WebPubSub.WebPubSubServiceClient` as a singleton for given `connectionName` in the services provided by the `builder`. This overload does not require a service key and uses the connection name as the service key to support scenarios where multiple Hubs are referenced in the same application.

```csharp
public static class AspireWebPubSubExtensions
{
    public static void AddKeyedAzureWebPubSubServiceClient(
        this IHostApplicationBuilder builder,
        string connectionName,
        Action<AzureMessagingWebPubSubSettings>? configureSettings = null,
        Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>? configureClientBuilder = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IHostApplicationBuilder`)
  The `Hosting.IHostApplicationBuilder` to read config from and add services to.
- `connectionName` (`string`)
  The name of the component to retrieve the connection string from the ConnectionStrings configuration section.
- `configureSettings` (`Action<AzureMessagingWebPubSubSettings>`) `optional`
  An optional method that can be used for customizing the [AzureMessagingWebPubSubSettings](/reference/api/csharp/aspire.azure.messaging.webpubsub/azuremessagingwebpubsubsettings.md). It's invoked after the settings are read from the configuration.
- `configureClientBuilder` (`Action<IAzureClientBuilder<WebPubSubServiceClient, WebPubSubServiceClientOptions>>`) `optional`
  An optional method that can be used for customizing the `Extensions.IAzureClientBuilder`2`.

## Exceptions

- `InvalidOperationException` -- Thrown when neither [AzureMessagingWebPubSubSettings.ConnectionString](/reference/api/csharp/aspire.azure.messaging.webpubsub/azuremessagingwebpubsubsettings/properties.md#connectionstring) nor [AzureMessagingWebPubSubSettings.Endpoint](/reference/api/csharp/aspire.azure.messaging.webpubsub/azuremessagingwebpubsubsettings/properties.md#endpoint) is provided.

## Remarks

Reads the configuration from "Aspire.Azure.Messaging.WebPubSub:{name}" section.
