# PolymorphicDomainObjectContainer

API Documentation: | `PolymorphicDomainObjectContainer`

Known Subtypes: |
`TaskContainer`
`AuthenticationContainer`
`PlayDistributionContainer`

A `NamedDomainObjectContainer` that allows to create domain objects with different types.

### Properties

No properties

### Methods

Method | Description
`containerWithType(type)` | Creates a regular container that wraps the polymorphic container presenting all elements of a specified type.
`create(name)` | Creates a new item with the given name, adding it to this container.
`create(name, configureClosure)` | Creates a new item with the given name, adding it to this container, then configuring it with the given closure.
`create(name, type)` | Creates a domain object with the specified name and type, and adds it to the container.
`create(name, type, configuration)` | Creates a domain object with the specified name and type, adds it to the container, and configures it with the specified action.
`create(name, configureAction)` | Creates a new item with the given name, adding it to this container, then configuring it with the given action.
`getByName(name)` | Locates an object by name, failing if there is no such object.
`getByName(name, configureClosure)` | Locates an object by name, failing if there is no such object. The given configure closure is executed against the object before it is returned from this method. The object is passed to the closure as its delegate.
`getByName(name, configureAction)` | Locates an object by name, failing if there is no such object. The given configure action is executed against the object before it is returned from this method.
`maybeCreate(name)` | Looks for an item with the given name, creating and adding it to this container if it does not exist.
`maybeCreate(name, type)` | Looks for an item with the given name and type, creating and adding it to this container if it does not exist.
`named(name)` | Locates a object by name, without triggering its creation or configuration, failing if there is no such object.
`named(name, type)` | Locates a object by name and type, without triggering its creation or configuration, failing if there is no such object.
`named(name, type, configurationAction)` | Locates a object by name and type, without triggering its creation or configuration, failing if there is no such object. The given configure action is executed against the object before it is returned from the provider.
`named(name, configurationAction)` | Locates a object by name, without triggering its creation or configuration, failing if there is no such object. The given configure action is executed against the object before it is returned from the provider.
`register(name)` | Defines a new object, which will be created when it is required. A object is 'required' when the object is located using query methods such as `NamedDomainObjectCollection.getByName(java.lang.String)` or when `Provider.get()` is called on the return value of this method.
`register(name, configurationAction)` | Defines a new object, which will be created and configured when it is required. An object is 'required' when the object is located using query methods such as `NamedDomainObjectCollection.getByName(java.lang.String)` or when `Provider.get()` is called on the return value of this method.

### Script blocks

No script blocks

### Method details

#### ``NamedDomainObjectContainer`<`U`>` `containerWithType`(``Class`<`U`>` type)

Creates a regular container that wraps the polymorphic container presenting all elements of a specified type.

#### `T` `create`(`String` name)

Creates a new item with the given name, adding it to this container.

#### `T` `create`(`String` name, `Closure` configureClosure)

Creates a new item with the given name, adding it to this container, then configuring it with the given closure.

#### `U` `create`(`String` name, ``Class`<`U`>` type)

Creates a domain object with the specified name and type, and adds it to the container.

#### `U` `create`(`String` name, ``Class`<`U`>` type, ``Action`<? super `U`>` configuration)

Creates a domain object with the specified name and type, adds it to the container, and configures it with the specified action.

#### `T` `create`(`String` name, ``Action`<? super `T`>` configureAction)

Creates a new item with the given name, adding it to this container, then configuring it with the given action.

#### `T` `getByName`(`String` name)

Locates an object by name, failing if there is no such object.

#### `T` `getByName`(`String` name, `Closure` configureClosure)

Locates an object by name, failing if there is no such object. The given configure closure is executed against the object before it is returned from this method. The object is passed to the closure as its delegate.

#### `T` `getByName`(`String` name, ``Action`<? super `T`>` configureAction)

Locates an object by name, failing if there is no such object. The given configure action is executed against the object before it is returned from this method.

#### `T` `maybeCreate`(`String` name)

Looks for an item with the given name, creating and adding it to this container if it does not exist.

#### `U` `maybeCreate`(`String` name, ``Class`<`U`>` type)

Looks for an item with the given name and type, creating and adding it to this container if it does not exist.

#### ``NamedDomainObjectProvider`<`T`>` `named`(`String` name)

Locates a object by name, without triggering its creation or configuration, failing if there is no such object.

#### ``NamedDomainObjectProvider`<`S`>` `named`(`String` name, ``Class`<`S`>` type)

Locates a object by name and type, without triggering its creation or configuration, failing if there is no such object.

#### ``NamedDomainObjectProvider`<`S`>` `named`(`String` name, ``Class`<`S`>` type, ``Action`<? super `S`>` configurationAction)

Locates a object by name and type, without triggering its creation or configuration, failing if there is no such object. The given configure action is executed against the object before it is returned from the provider.

#### ``NamedDomainObjectProvider`<`T`>` `named`(`String` name, ``Action`<? super `T`>` configurationAction)

Locates a object by name, without triggering its creation or configuration, failing if there is no such object. The given configure action is executed against the object before it is returned from the provider.

#### ``NamedDomainObjectProvider`<`T`>` `register`(`String` name)

Defines a new object, which will be created when it is required. A object is 'required' when the object is located using query methods such as `NamedDomainObjectCollection.getByName(java.lang.String)` or when `Provider.get()` is called on the return value of this method.

It is generally more efficient to use this method instead of `NamedDomainObjectContainer.create(java.lang.String)`, as that method will eagerly create the object, regardless of whether that object is required for the current build or not. This method, on the other hand, will defer creation until required.

#### ``NamedDomainObjectProvider`<`T`>` `register`(`String` name, ``Action`<? super `T`>` configurationAction)

Defines a new object, which will be created and configured when it is required. An object is 'required' when the object is located using query methods such as `NamedDomainObjectCollection.getByName(java.lang.String)` or when `Provider.get()` is called on the return value of this method.

It is generally more efficient to use this method instead of `NamedDomainObjectContainer.create(java.lang.String, org.gradle.api.Action)` or `NamedDomainObjectContainer.create(java.lang.String)`, as those methods will eagerly create and configure the object, regardless of whether that object is required for the current build or not. This method, on the other hand, will defer creation and configuration until required.