# IDistributedApplicationBuilder

- Module: [Aspire.Hosting](/reference/api/typescript/aspire.hosting.md)
- Version: `13.4.0`
- Kind: `interface`
- Source: [GitHub](https://github.com/microsoft/aspire)

A builder for creating instances of {@ats-ref type:DistributedApplication}.

## Definition

```typescript
interface IDistributedApplicationBuilder {
  readonly appHostDirectory: string;
  readonly environment: IHostEnvironment;
  readonly eventing: IDistributedApplicationEventing;
  readonly executionContext: DistributedApplicationExecutionContext;
  readonly pipeline: IDistributedApplicationPipeline;
  readonly userSecretsManager: IUserSecretsManager;
  addConnectionString(
      name: string,
      environmentVariableNameOrExpression?: ReferenceExpression): IResourceWithConnectionString;
  addContainer(
      name: string,
      image: AddContainerOptions): ContainerResource;
  addContainerRegistry(
      name: string,
      endpoint: ParameterResource,
      repository?: ParameterResource): ContainerRegistryResource;
  addCSharpApp(
      name: string,
      path: string,
      options?: ProjectResourceOptions): CSharpAppResource;
  addDockerfile(
      name: string,
      contextPath: string,
      dockerfilePath?: string,
      stage?: string): ContainerResource;
  addDockerfileBuilder(name: string, contextPath: string, callback: (arg: DockerfileBuilderCallbackContext) => Promise<void>, stage?: string): ContainerResource;
  addDockerfileFactory(name: string, contextPath: string, dockerfileFactory: (arg: DockerfileFactoryContext) => Promise<string>, stage?: string): ContainerResource;
  addDotnetTool(
      name: string,
      packageId: string): DotnetToolResource;
  addEventingSubscriber(subscribe: (arg: EventingSubscriberRegistrationContext) => Promise<void>): void;
  addExecutable(
      name: string,
      command: string,
      workingDirectory: string,
      args: string[]): ExecutableResource;
  addExternalService(
      name: string,
      url: ParameterResource): ExternalServiceResource;
  addParameter(
      name: string,
      value?: string,
      publishValueAsDefault?: boolean,
      secret?: boolean): ParameterResource;
  addParameterFromConfiguration(
      name: string,
      configurationKey: string,
      secret?: boolean): ParameterResource;
  addParameterWithGeneratedValue(
      name: string,
      value: GenerateParameterDefault,
      secret?: boolean,
      persist?: boolean): ParameterResource;
  addProject(
      name: string,
      projectPath: string,
      launchProfileOrOptions?: ProjectResourceOptions): ProjectResource;
  build(): DistributedApplication;
  getConfiguration(): IConfiguration;
  subscribeAfterPublish(callback: (arg: AfterPublishEvent) => Promise<void>): DistributedApplicationEventSubscription;
  subscribeAfterResourcesCreated(callback: (arg: AfterResourcesCreatedEvent) => Promise<void>): DistributedApplicationEventSubscription;
  subscribeBeforePublish(callback: (arg: BeforePublishEvent) => Promise<void>): DistributedApplicationEventSubscription;
  subscribeBeforeStart(callback: (arg: BeforeStartEvent) => Promise<void>): DistributedApplicationEventSubscription;
  tryAddEventingSubscriber(subscribe: (arg: EventingSubscriberRegistrationContext) => Promise<void>): void;
}
```

## Properties

- `appHostDirectory`: `string` `get` -- Directory of the project where the app host is located. Defaults to the content root if there's no project.
- `environment`: `IHostEnvironment` `get` -- Gets the Environment property
- `eventing`: [IDistributedApplicationEventing](/reference/api/typescript/aspire.hosting/idistributedapplicationeventing.md) `get` -- Eventing infrastructure for AppHost lifecycle.
- `executionContext`: [DistributedApplicationExecutionContext](/reference/api/typescript/aspire.hosting/distributedapplicationexecutioncontext.md) `get` -- Execution context for this invocation of the AppHost.
- `pipeline`: [IDistributedApplicationPipeline](/reference/api/typescript/aspire.hosting/idistributedapplicationpipeline.md) `get` -- Gets the deployment pipeline for this distributed application.
- `userSecretsManager`: [IUserSecretsManager](/reference/api/typescript/aspire.hosting/iusersecretsmanager.md) `get` -- Gets the service for managing user secrets.

## Methods

- [addConnectionString](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/addconnectionstring.md) -- `method` -- Adds a connection string resource
    ```typescript
  addConnectionString(name: string, environmentVariableNameOrExpression?: ReferenceExpression): IResourceWithConnectionString
  ```
- [addContainer](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/addcontainer.md) -- `method` -- Adds a container resource to the application.
    ```typescript
  addContainer(name: string, image: AddContainerOptions): ContainerResource
  ```
- [addContainerRegistry](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/addcontainerregistry.md) -- `method` -- Adds a container registry resource
    ```typescript
  addContainerRegistry(name: string, endpoint: ParameterResource, repository?: ParameterResource): ContainerRegistryResource
  ```
- [addCSharpApp](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/addcsharpapp.md) -- `method` -- Adds a C# application resource
    ```typescript
  addCSharpApp(name: string, path: string, options?: ProjectResourceOptions): CSharpAppResource
  ```
- [addDockerfile](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/adddockerfile.md) -- `method` -- Adds a Dockerfile to the application model that can be treated like a container resource.
    ```typescript
  addDockerfile(name: string, contextPath: string, dockerfilePath?: string, stage?: string): ContainerResource
  ```
- [addDockerfileBuilder](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/adddockerfilebuilder.md) -- `method` -- Adds a container resource built from a programmatically generated Dockerfile
    ```typescript
  addDockerfileBuilder(name: string, contextPath: string, callback: (arg: DockerfileBuilderCallbackContext) => Promise<void>, stage?: string): ContainerResource
  ```
- [addDockerfileFactory](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/adddockerfilefactory.md) -- `method` -- Adds a Dockerfile to the application model that can be treated like a container resource, with the Dockerfile content generated by an asynchronous factory function.
    ```typescript
  addDockerfileFactory(name: string, contextPath: string, dockerfileFactory: (arg: DockerfileFactoryContext) => Promise<string>, stage?: string): ContainerResource
  ```
- [addDotnetTool](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/adddotnettool.md) -- `method` -- Adds a .NET tool resource to the application model.
    ```typescript
  addDotnetTool(name: string, packageId: string): DotnetToolResource
  ```
- [addEventingSubscriber](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/addeventingsubscriber.md) -- `method` -- Adds an ATS-friendly eventing subscriber callback to the distributed-application builder.
    ```typescript
  addEventingSubscriber(subscribe: (arg: EventingSubscriberRegistrationContext) => Promise<void>): void
  ```
- [addExecutable](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/addexecutable.md) -- `method` -- Adds an executable resource to the application model.
    ```typescript
  addExecutable(name: string, command: string, workingDirectory: string, args: string[]): ExecutableResource
  ```
- [addExternalService](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/addexternalservice.md) -- `method` -- Adds an external service resource
    ```typescript
  addExternalService(name: string, url: ParameterResource): ExternalServiceResource
  ```
- [addParameter](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/addparameter.md) -- `method` -- Adds a parameter resource
    ```typescript
  addParameter(name: string, value?: string, publishValueAsDefault?: boolean, secret?: boolean): ParameterResource
  ```
- [addParameterFromConfiguration](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/addparameterfromconfiguration.md) -- `method` -- Adds a parameter resource to the application, with a value coming from configuration.
    ```typescript
  addParameterFromConfiguration(name: string, configurationKey: string, secret?: boolean): ParameterResource
  ```
- [addParameterWithGeneratedValue](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/addparameterwithgeneratedvalue.md) -- `method` -- Adds a parameter with a generated default value
    ```typescript
  addParameterWithGeneratedValue(name: string, value: GenerateParameterDefault, secret?: boolean, persist?: boolean): ParameterResource
  ```
- [addProject](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/addproject.md) -- `method` -- Adds a .NET project resource
    ```typescript
  addProject(name: string, projectPath: string, launchProfileOrOptions?: ProjectResourceOptions): ProjectResource
  ```
- [build](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/build.md) -- `method` -- Builds the distributed application
    ```typescript
  build(): DistributedApplication
  ```
- [getConfiguration](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/getconfiguration.md) -- `method` -- Gets the application configuration.
    ```typescript
  getConfiguration(): IConfiguration
  ```
- [subscribeAfterPublish](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/subscribeafterpublish.md) -- `method` -- Subscribes to the AfterPublish event, which fires after the application is published.
    ```typescript
  subscribeAfterPublish(callback: (arg: AfterPublishEvent) => Promise<void>): DistributedApplicationEventSubscription
  ```
- [subscribeAfterResourcesCreated](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/subscribeafterresourcescreated.md) -- `method` -- Subscribes to the AfterResourcesCreated event, which fires after all resources are created.
    ```typescript
  subscribeAfterResourcesCreated(callback: (arg: AfterResourcesCreatedEvent) => Promise<void>): DistributedApplicationEventSubscription
  ```
- [subscribeBeforePublish](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/subscribebeforepublish.md) -- `method` -- Subscribes to the BeforePublish event, which fires before the application is published.
    ```typescript
  subscribeBeforePublish(callback: (arg: BeforePublishEvent) => Promise<void>): DistributedApplicationEventSubscription
  ```
- [subscribeBeforeStart](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/subscribebeforestart.md) -- `method` -- Subscribes to the BeforeStart event, which fires before the application starts.
    ```typescript
  subscribeBeforeStart(callback: (arg: BeforeStartEvent) => Promise<void>): DistributedApplicationEventSubscription
  ```
- [tryAddEventingSubscriber](/reference/api/typescript/aspire.hosting/idistributedapplicationbuilder/tryaddeventingsubscriber.md) -- `method` -- Attempts to add an ATS-friendly eventing subscriber callback to the distributed-application builder.
    ```typescript
  tryAddEventingSubscriber(subscribe: (arg: EventingSubscriberRegistrationContext) => Promise<void>): void
  ```
