# ContainerRegistryResourceBuilderExtensions Methods

- Package: [Aspire.Hosting](/reference/api/csharp/aspire.hosting.md)
- Type: [ContainerRegistryResourceBuilderExtensions](/reference/api/csharp/aspire.hosting/containerregistryresourcebuilderextensions.md)
- Kind: `Methods`
- Members: `3`

Provides extension methods for adding container registry resources to the distributed application.

## AddContainerRegistry(IDistributedApplicationBuilder, string, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>)

> **Experimental:** ASPIRECOMPUTE003 - [Learn more](/diagnostics/aspirecompute003/)

- Name: `AddContainerRegistry(IDistributedApplicationBuilder, string, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<ContainerRegistryResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/bd20f904cde09ecb9c9ae5116a6f13614bf2d7c2/src/Aspire.Hosting/ContainerRegistryResourceBuilderExtensions.cs)

Adds a container registry resource to the application model with parameterized values.

```csharp
public static class ContainerRegistryResourceBuilderExtensions
{
    public static IResourceBuilder<ContainerRegistryResource> AddContainerRegistry(
        this IDistributedApplicationBuilder builder,
        string name,
        IResourceBuilder<ParameterResource> endpoint,
        IResourceBuilder<ParameterResource>? repository = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` ([IDistributedApplicationBuilder](/reference/api/csharp/aspire.hosting/idistributedapplicationbuilder.md))
  The distributed application builder.
- `name` (`string`)
  The name of the container registry resource.
- `endpoint` (`IResourceBuilder<ParameterResource>`)
  An `ApplicationModel.IResourceBuilder`1` containing the registry endpoint URL or hostname.
- `repository` (`IResourceBuilder<ParameterResource>`) `optional`
  An optional `ApplicationModel.IResourceBuilder`1` containing the repository path within the registry.

## Returns

`IResourceBuilder<ContainerRegistryResource>` -- An `ApplicationModel.IResourceBuilder`1` for the container registry resource.

## Remarks

Use this method when the registry endpoint and repository values need to be provided dynamically via configuration or user input. The resource is only added to the application model in publish mode; in run mode, a resource builder is created without adding the resource to the model.

## Examples

Add a container registry with parameterized values:

```csharp
var endpointParameter = builder.AddParameter("registry-endpoint");
var repositoryParameter = builder.AddParameter("registry-repo");
var registry = builder.AddContainerRegistry("my-registry", endpointParameter, repositoryParameter);
```

## ATS metadata

### Ignored by ATS

- Reason: Polyglot app hosts use the internal addContainerRegistry dispatcher export.

## AddContainerRegistry(IDistributedApplicationBuilder, string, string, string?)

> **Experimental:** ASPIRECOMPUTE003 - [Learn more](/diagnostics/aspirecompute003/)

- Name: `AddContainerRegistry(IDistributedApplicationBuilder, string, string, string?)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<ContainerRegistryResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/bd20f904cde09ecb9c9ae5116a6f13614bf2d7c2/src/Aspire.Hosting/ContainerRegistryResourceBuilderExtensions.cs)

Adds a container registry resource to the application model with literal string values.

```csharp
public static class ContainerRegistryResourceBuilderExtensions
{
    public static IResourceBuilder<ContainerRegistryResource> AddContainerRegistry(
        this IDistributedApplicationBuilder builder,
        string name,
        string endpoint,
        string? repository = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` ([IDistributedApplicationBuilder](/reference/api/csharp/aspire.hosting/idistributedapplicationbuilder.md))
  The distributed application builder.
- `name` (`string`)
  The name of the container registry resource.
- `endpoint` (`string`)
  The registry endpoint URL or hostname (e.g., "docker.io", "ghcr.io").
- `repository` (`string?`) `optional`
  The optional repository path within the registry (e.g., "myusername" for Docker Hub, "owner/repo" for GHCR).

## Returns

`IResourceBuilder<ContainerRegistryResource>` -- An `ApplicationModel.IResourceBuilder`1` for the container registry resource.

## Remarks

Use this method when the registry endpoint and repository values are known at design time and do not need to be parameterized. The resource is only added to the application model in publish mode; in run mode, a resource builder is created without adding the resource to the model.

## Examples

### Example 1

Add a Docker Hub container registry:

```csharp
var registry = builder.AddContainerRegistry("docker-hub", "docker.io", "myusername");
```

### Example 2

Add a GitHub Container Registry:

```csharp
var registry = builder.AddContainerRegistry("ghcr", "ghcr.io", "owner/repo");
```

## ATS metadata

### Ignored by ATS

- Reason: Polyglot app hosts use the internal addContainerRegistry dispatcher export.

## WithContainerRegistry(IResourceBuilder<TDestination>, IResourceBuilder<TContainerRegistry>)

> **Experimental:** ASPIRECOMPUTE003 - [Learn more](/diagnostics/aspirecompute003/)

- Name: `WithContainerRegistry(IResourceBuilder<TDestination>, IResourceBuilder<TContainerRegistry>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<TDestination>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/bd20f904cde09ecb9c9ae5116a6f13614bf2d7c2/src/Aspire.Hosting/ContainerRegistryResourceBuilderExtensions.cs#L188-L191)

Configures the resource to use the specified container registry for container image operations.

```csharp
public static class ContainerRegistryResourceBuilderExtensions
{
    public static IResourceBuilder<TDestination> WithContainerRegistry<TDestination, TContainerRegistry>(
        this IResourceBuilder<TDestination> builder,
        IResourceBuilder<TContainerRegistry> registry)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<TDestination>`)
  The resource builder.
- `registry` (`IResourceBuilder<TContainerRegistry>`)
  The container registry resource builder.

## Returns

`IResourceBuilder<TDestination>` -- The resource builder for chaining.

## Remarks

This method adds a [ContainerRegistryReferenceAnnotation](/reference/api/csharp/aspire.hosting/containerregistryreferenceannotation.md) to the resource, indicating that the resource should use the specified container registry for container image operations.

## Examples

Configure a project to use a container registry:

```csharp
var registry = builder.AddContainerRegistry("docker-hub", "docker.io", "myusername");
var project = builder.AddProject<MyProject>("myproject")
    .WithContainerRegistry(registry);
```

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.
