---
title: "Phalcon Di"
version: "5.19"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.phalcon.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Phalcon Di

:::info[NOTE]
All classes are prefixed with `Phalcon`
:::

## Di\AbstractInjectionAware

<span class="badge badge--abstract">Abstract</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/AbstractInjectionAware.zep">Source on GitHub</a>

This abstract class offers common access to the DI in a class

<div class="api-tree">

- `\stdClass`
- **`Phalcon\Di\AbstractInjectionAware`** - implements [`Phalcon\Di\InjectionAwareInterface`](#diinjectionawareinterface)
- [`Phalcon\Assets\Manager`](/5.19/api/phalcon_assets/#assetsmanager)
- [`Phalcon\Cli\Router`](/5.19/api/phalcon_cli/#clirouter)
- [`Phalcon\Dispatcher\AbstractDispatcher`](/5.19/api/phalcon_dispatcher/#dispatcherabstractdispatcher)
- [`Phalcon\Encryption\Security`](/5.19/api/phalcon_encryption/#encryptionsecurity)
- [`Phalcon\Flash\AbstractFlash`](/5.19/api/phalcon_flash/#flashabstractflash)
- [`Phalcon\Http\Cookie`](/5.19/api/phalcon_http/#httpcookie)
- [`Phalcon\Http\Request`](/5.19/api/phalcon_http/#httprequest)
- [`Phalcon\Http\Response\Cookies`](/5.19/api/phalcon_http/#httpresponsecookies)
- [`Phalcon\Mvc\Model`](/5.19/api/phalcon_mvc/#mvcmodel)
- [`Phalcon\Mvc\Router`](/5.19/api/phalcon_mvc/#mvcrouter)
- [`Phalcon\Mvc\Url`](/5.19/api/phalcon_mvc/#mvcurl)
- [`Phalcon\Session\Manager`](/5.19/api/phalcon_session/#sessionmanager)

</div>

__Uses__ `stdClass`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diabstractinjectionaware-getdi">
<code class="vis vis-public">public</code>
<code class="ret">DiInterface</code>
<code class="sig"><span class="sf">getDI</span>()</code>
<span class="desc">Returns the internal dependency injector</span>
</a>
<a class="api-item" href="#diabstractinjectionaware-setdi">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">setDI</span>( <span class="st">DiInterface</span> <span class="sv">$container</span> )</code>
<span class="desc">Sets the dependency injector</span>
</a>
</div>

### Properties

<div class="api-list">
<div class="api-item">
<code class="vis vis-protected">protected</code>
<code class="ret">DiInterface</code>
<code class="sig"><span class="sv">$container</span></code>
<span class="desc">Dependency Injector</span>
</div>
</div>

### Methods

<div class="api-group">Public · 2</div>

<h4 id="diabstractinjectionaware-getdi"><code>getDI()</code></h4>

```php
public function getDI(): DiInterface;
```

Returns the internal dependency injector

<h4 id="diabstractinjectionaware-setdi"><code>setDI()</code></h4>

```php
public function setDI( DiInterface $container ): void;
```

Sets the dependency injector

## Di\Di

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Di.zep">Source on GitHub</a>

Phalcon\Di\Di is a component that implements Dependency Injection/Service
Location of services and it's itself a container for them.

Since Phalcon is highly decoupled, Phalcon\Di\Di is essential to integrate the
different components of the framework. The developer can also use this
component to inject dependencies and manage global instances of the different
classes used in the application.

Basically, this component implements the `Inversion of Control` pattern.
Applying this, the objects do not receive their dependencies using setters or
constructors, but requesting a service dependency injector. This reduces the
overall complexity, since there is only one way to get the required
dependencies within a component.

Additionally, this pattern increases testability in the code, thus making it
less prone to errors.

```php
use Phalcon\Di\Di;
use Phalcon\Http\Request;

$di = new Di();

// Using a string definition
$di->set("request", Request::class, true);

// Using an anonymous function
$di->setShared(
"request",
function () {
    return new Request();
}
);

$request = $di->getRequest();
```

<div class="api-tree">

- **`Phalcon\Di\Di`** - implements [`Phalcon\Di\DiInterface`](#didiinterface)
- [`Phalcon\Di\FactoryDefault`](#difactorydefault)

</div>

__Uses__ `Phalcon\Config\Adapter\Php` · `Phalcon\Config\Adapter\Yaml` · `Phalcon\Config\ConfigInterface` · `Phalcon\Di\DiInterface` · `Phalcon\Di\Exception` · `Phalcon\Di\Exception\ServiceResolutionException` · `Phalcon\Di\Exceptions\AliasAlreadyInUse` · `Phalcon\Di\Exceptions\AliasNameMustBeString` · `Phalcon\Di\Exceptions\CircularAliasReference` · `Phalcon\Di\Exceptions\ServiceCannotBeResolved` · `Phalcon\Di\InitializationAwareInterface` · `Phalcon\Di\InjectionAwareInterface` · `Phalcon\Di\Service` · `Phalcon\Di\ServiceInterface` · `Phalcon\Di\ServiceProviderInterface` · `Phalcon\Events\ManagerInterface`

### Method Summary

<div class="api-list">
<a class="api-item" href="#didi-__call">
<code class="vis vis-public">public</code>
<code class="ret">mixed|null</code>
<code class="sig"><span class="sf">__call</span>(<span class="prm"><span class="st">string</span> <span class="sv">$method</span>,</span><span class="prm"><span class="st">array</span> <span class="sv">$arguments</span><span class="sm"> = []</span></span>)</code>
<span class="desc">Magic method to get or set services using setters/getters</span>
</a>
<a class="api-item" href="#didi-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>()</code>
<span class="desc">Phalcon\Di\Di constructor</span>
</a>
<a class="api-item" href="#didi-attempt">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface|bool</code>
<code class="sig"><span class="sf">attempt</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$definition</span>,</span><span class="prm"><span class="st">bool</span> <span class="sv">$shared</span><span class="sm"> = false</span></span>)</code>
<span class="desc">Attempts to register a service in the services container</span>
</a>
<a class="api-item" href="#didi-get">
<code class="vis vis-public">public</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sf">get</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$parameters</span><span class="sm"> = null</span></span>)</code>
<span class="desc">Resolves the service based on its configuration</span>
</a>
<a class="api-item" href="#didi-getalias">
<code class="vis vis-public">public</code>
<code class="ret">string</code>
<code class="sig"><span class="sf">getAlias</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Return the alias based on a passed key. Returns an empty string if</span>
</a>
<a class="api-item" href="#didi-getdefault">
<code class="vis vis-public">public</code>
<code class="ret">DiInterface|null</code>
<code class="sig"><span class="sf">getDefault</span>()</code>
<span class="desc">Return the latest DI created</span>
</a>
<a class="api-item" href="#didi-getinternaleventsmanager">
<code class="vis vis-public">public</code>
<code class="ret">ManagerInterface|null</code>
<code class="sig"><span class="sf">getInternalEventsManager</span>()</code>
<span class="desc">Returns the internal event manager</span>
</a>
<a class="api-item" href="#didi-getraw">
<code class="vis vis-public">public</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sf">getRaw</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Returns a service definition without resolving</span>
</a>
<a class="api-item" href="#didi-getservice">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface</code>
<code class="sig"><span class="sf">getService</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Returns a Phalcon\Di\Service instance</span>
</a>
<a class="api-item" href="#didi-getservices">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface[]</code>
<code class="sig"><span class="sf">getServices</span>()</code>
<span class="desc">Return the services registered in the DI</span>
</a>
<a class="api-item" href="#didi-getshared">
<code class="vis vis-public">public</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sf">getShared</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$parameters</span><span class="sm"> = null</span></span>)</code>
<span class="desc">Resolves a service, the resolved service is stored in the DI, subsequent</span>
</a>
<a class="api-item" href="#didi-has">
<code class="vis vis-public">public</code>
<code class="ret">bool</code>
<code class="sig"><span class="sf">has</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Check whether the DI contains a service by a name</span>
</a>
<a class="api-item" href="#didi-hasshared">
<code class="vis vis-public">public</code>
<code class="ret">bool</code>
<code class="sig"><span class="sf">hasShared</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Check whether the DI has a cached shared instance for a service name.</span>
</a>
<a class="api-item" href="#didi-loadfromphp">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">loadFromPhp</span>( <span class="st">string</span> <span class="sv">$filePath</span> )</code>
<span class="desc">Loads services from a php config file.</span>
</a>
<a class="api-item" href="#didi-loadfromyaml">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">loadFromYaml</span>(<span class="prm"><span class="st">string</span> <span class="sv">$filePath</span>,</span><span class="prm"><span class="st">array|null</span> <span class="sv">$callbacks</span><span class="sm"> = null</span></span>)</code>
<span class="desc">Loads services from a yaml file.</span>
</a>
<a class="api-item" href="#didi-offsetexists">
<code class="vis vis-public">public</code>
<code class="ret">bool</code>
<code class="sig"><span class="sf">offsetExists</span>( <span class="st">mixed</span> <span class="sv">$name</span> )</code>
<span class="desc">Check if a service is registered using the array syntax</span>
</a>
<a class="api-item" href="#didi-offsetget">
<code class="vis vis-public">public</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sf">offsetGet</span>( <span class="st">mixed</span> <span class="sv">$name</span> )</code>
<span class="desc">Allows to obtain a shared service using the array syntax</span>
</a>
<a class="api-item" href="#didi-offsetset">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">offsetSet</span>(<span class="prm"><span class="st">mixed</span> <span class="sv">$offset</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$value</span></span>)</code>
<span class="desc">Allows to register a shared service using the array syntax</span>
</a>
<a class="api-item" href="#didi-offsetunset">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">offsetUnset</span>( <span class="st">mixed</span> <span class="sv">$name</span> )</code>
<span class="desc">Removes a service from the services container using the array syntax</span>
</a>
<a class="api-item" href="#didi-register">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">register</span>( <span class="st">ServiceProviderInterface</span> <span class="sv">$provider</span> )</code>
<span class="desc">Registers a service provider.</span>
</a>
<a class="api-item" href="#didi-remove">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">remove</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Removes a service in the services container</span>
</a>
<a class="api-item" href="#didi-removeshared">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">removeShared</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Removes the cached shared instance for a service, leaving the service</span>
</a>
<a class="api-item" href="#didi-reset">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">reset</span>()</code>
<span class="desc">Resets the internal default DI</span>
</a>
<a class="api-item" href="#didi-set">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface</code>
<code class="sig"><span class="sf">set</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$definition</span>,</span><span class="prm"><span class="st">bool</span> <span class="sv">$shared</span><span class="sm"> = false</span></span>)</code>
<span class="desc">Registers a service in the services container</span>
</a>
<a class="api-item" href="#didi-setalias">
<code class="vis vis-public">public</code>
<code class="ret">self</code>
<code class="sig"><span class="sf">setAlias</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$aliases</span></span>)</code>
<span class="desc">Sets one or more aliases to the given name.</span>
</a>
<a class="api-item" href="#didi-setdefault">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">setDefault</span>( <span class="st">DiInterface</span> <span class="sv">$container</span> )</code>
<span class="desc">Set a default dependency injection container to be obtained into static</span>
</a>
<a class="api-item" href="#didi-setinternaleventsmanager">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">setInternalEventsManager</span>( <span class="st">ManagerInterface</span> <span class="sv">$eventsManager</span> )</code>
<span class="desc">Sets the internal event manager</span>
</a>
<a class="api-item" href="#didi-setservice">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface</code>
<code class="sig"><span class="sf">setService</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">ServiceInterface</span> <span class="sv">$rawDefinition</span></span>)</code>
<span class="desc">Sets a service using a raw Phalcon\Di\Service definition</span>
</a>
<a class="api-item" href="#didi-setshared">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface</code>
<code class="sig"><span class="sf">setShared</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$definition</span></span>)</code>
<span class="desc">Registers an &quot;always shared&quot; service in the services container</span>
</a>
<a class="api-item" href="#didi-loadfromconfig">
<code class="vis vis-protected">protected</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">loadFromConfig</span>( <span class="st">ConfigInterface</span> <span class="sv">$config</span> )</code>
<span class="desc">Loads services from a Config object.</span>
</a>
</div>

### Properties

<div class="api-list">
<div class="api-item">
<code class="vis vis-protected">protected</code>
<code class="ret">array</code>
<code class="sig"><span class="sv">$aliases</span><span class="sm"> = []</span></code>
<span class="desc">List of service aliases</span>
</div>
<div class="api-item">
<code class="vis vis-protected">protected</code>
<code class="ret">DiInterface|null</code>
<code class="sig"><span class="sv">$defaultContainer</span><span class="sm"> = null</span></code>
<span class="desc">Latest DI build</span>
</div>
<div class="api-item">
<code class="vis vis-protected">protected</code>
<code class="ret">ManagerInterface|null</code>
<code class="sig"><span class="sv">$eventsManager</span><span class="sm"> = null</span></code>
<span class="desc">Events Manager</span>
</div>
<div class="api-item">
<code class="vis vis-protected">protected</code>
<code class="ret">ServiceInterface[]</code>
<code class="sig"><span class="sv">$services</span><span class="sm"> = []</span></code>
<span class="desc">List of registered services</span>
</div>
<div class="api-item">
<code class="vis vis-protected">protected</code>
<code class="ret">array</code>
<code class="sig"><span class="sv">$sharedInstances</span><span class="sm"> = []</span></code>
<span class="desc">List of shared instances</span>
</div>
</div>

### Methods

<div class="api-group">Public · 29</div>

<h4 id="didi-__call"><code>__call()</code></h4>

```php
public function __call(
string $method,
array $arguments = []
): mixed|null;
```

Magic method to get or set services using setters/getters

<h4 id="didi-__construct"><code>__construct()</code></h4>

```php
public function __construct();
```

Phalcon\Di\Di constructor

<h4 id="didi-attempt"><code>attempt()</code></h4>

```php
public function attempt(
string $name,
mixed $definition,
bool $shared = false
): ServiceInterface|bool;
```

Attempts to register a service in the services container
Only is successful if a service hasn't been registered previously
with the same name

<h4 id="didi-get"><code>get()</code></h4>

```php
public function get(
string $name,
mixed $parameters = null
): mixed;
```

Resolves the service based on its configuration

<h4 id="didi-getalias"><code>getAlias()</code></h4>

```php
public function getAlias( string $name ): string;
```

Return the alias based on a passed key. Returns an empty string if
the alias does not exist

<h4 id="didi-getdefault"><code>getDefault()</code></h4>

```php
public static function getDefault(): DiInterface|null;
```

Return the latest DI created

<h4 id="didi-getinternaleventsmanager"><code>getInternalEventsManager()</code></h4>

```php
public function getInternalEventsManager(): ManagerInterface|null;
```

Returns the internal event manager

<h4 id="didi-getraw"><code>getRaw()</code></h4>

```php
public function getRaw( string $name ): mixed;
```

Returns a service definition without resolving

<h4 id="didi-getservice"><code>getService()</code></h4>

```php
public function getService( string $name ): ServiceInterface;
```

Returns a Phalcon\Di\Service instance

<h4 id="didi-getservices"><code>getServices()</code></h4>

```php
public function getServices(): ServiceInterface[];
```

Return the services registered in the DI

<h4 id="didi-getshared"><code>getShared()</code></h4>

```php
public function getShared(
string $name,
mixed $parameters = null
): mixed;
```

Resolves a service, the resolved service is stored in the DI, subsequent
requests for this service will return the same instance

<h4 id="didi-has"><code>has()</code></h4>

```php
public function has( string $name ): bool;
```

Check whether the DI contains a service by a name

<h4 id="didi-hasshared"><code>hasShared()</code></h4>

```php
public function hasShared( string $name ): bool;
```

Check whether the DI has a cached shared instance for a service name.

Unlike `has()`, which reports on the service *definition* registry,
this method reports only on the resolved-instance cache populated by
`getShared()`.

<h4 id="didi-loadfromphp"><code>loadFromPhp()</code></h4>

```php
public function loadFromPhp( string $filePath ): void;
```

Loads services from a php config file.

```php
$di->loadFromPhp("path/services.php");
```

And the services can be specified in the file as:

```php
return [
 'myComponent' => [
     'className' => '\Acme\Components\MyComponent',
     'shared' => true,
 ],
 'group' => [
     'className' => '\Acme\Group',
     'arguments' => [
         [
             'type' => 'service',
             'service' => 'myComponent',
         ],
     ],
 ],
 'user' => [
     'className' => '\Acme\User',
 ],
];
```

@link https://docs.phalcon.io/latest/di/

<h4 id="didi-loadfromyaml"><code>loadFromYaml()</code></h4>

```php
public function loadFromYaml(
string $filePath,
array|null $callbacks = null
): void;
```

Loads services from a yaml file.

```php
$di->loadFromYaml(
"path/services.yaml",
[
    "!approot" => function ($value) {
        return dirname(__DIR__) . $value;
    }
]
);
```

And the services can be specified in the file as:

```php
myComponent:
className: \Acme\Components\MyComponent
shared: true

group:
className: \Acme\Group
arguments:
    - type: service
      name: myComponent

user:
   className: \Acme\User
```

@link https://docs.phalcon.io/latest/di/

<h4 id="didi-offsetexists"><code>offsetExists()</code></h4>

```php
public function offsetExists( mixed $name ): bool;
```

Check if a service is registered using the array syntax

<h4 id="didi-offsetget"><code>offsetGet()</code></h4>

```php
public function offsetGet( mixed $name ): mixed;
```

Allows to obtain a shared service using the array syntax

```php
var_dump($di["request"]);
```

<h4 id="didi-offsetset"><code>offsetSet()</code></h4>

```php
public function offsetSet(
mixed $offset,
mixed $value
): void;
```

Allows to register a shared service using the array syntax

```php
$di["request"] = new \Phalcon\Http\Request();
```

<h4 id="didi-offsetunset"><code>offsetUnset()</code></h4>

```php
public function offsetUnset( mixed $name ): void;
```

Removes a service from the services container using the array syntax

<h4 id="didi-register"><code>register()</code></h4>

```php
public function register( ServiceProviderInterface $provider ): void;
```

Registers a service provider.

```php
use Phalcon\Di\DiInterface;
use Phalcon\Di\ServiceProviderInterface;

class SomeServiceProvider implements ServiceProviderInterface
{
public function register(DiInterface $di)
{
    $di->setShared(
        'service',
        function () {
            // ...
        }
    );
}
}
```

<h4 id="didi-remove"><code>remove()</code></h4>

```php
public function remove( string $name ): void;
```

Removes a service in the services container
It also removes any shared instance created for the service

<h4 id="didi-removeshared"><code>removeShared()</code></h4>

```php
public function removeShared( string $name ): void;
```

Removes the cached shared instance for a service, leaving the service
definition intact so the next `getShared()` call rebuilds it.

<h4 id="didi-reset"><code>reset()</code></h4>

```php
public static function reset(): void;
```

Resets the internal default DI

<h4 id="didi-set"><code>set()</code></h4>

```php
public function set(
string $name,
mixed $definition,
bool $shared = false
): ServiceInterface;
```

Registers a service in the services container

<h4 id="didi-setalias"><code>setAlias()</code></h4>

```php
public function setAlias(
string $name,
mixed $aliases
): self;
```

Sets one or more aliases to the given name.

<h4 id="didi-setdefault"><code>setDefault()</code></h4>

```php
public static function setDefault( DiInterface $container ): void;
```

Set a default dependency injection container to be obtained into static
methods

<h4 id="didi-setinternaleventsmanager"><code>setInternalEventsManager()</code></h4>

```php
public function setInternalEventsManager( ManagerInterface $eventsManager );
```

Sets the internal event manager

<h4 id="didi-setservice"><code>setService()</code></h4>

```php
public function setService(
string $name,
ServiceInterface $rawDefinition
): ServiceInterface;
```

Sets a service using a raw Phalcon\Di\Service definition

<h4 id="didi-setshared"><code>setShared()</code></h4>

```php
public function setShared(
string $name,
mixed $definition
): ServiceInterface;
```

Registers an "always shared" service in the services container

<div class="api-group">Protected · 1</div>

<h4 id="didi-loadfromconfig"><code>loadFromConfig()</code></h4>

```php
protected function loadFromConfig( ConfigInterface $config ): void;
```

Loads services from a Config object.

## Di\DiInterface

<span class="badge badge--interface">Interface</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/DiInterface.zep">Source on GitHub</a>

Interface for Phalcon\Di\Di

<div class="api-tree">

- `\ArrayAccess`
- **`Phalcon\Di\DiInterface`**

</div>

__Uses__ `ArrayAccess`

### Method Summary

<div class="api-list">
<a class="api-item" href="#didiinterface-attempt">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface|bool</code>
<code class="sig"><span class="sf">attempt</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$definition</span>,</span><span class="prm"><span class="st">bool</span> <span class="sv">$shared</span><span class="sm"> = false</span></span>)</code>
<span class="desc">Attempts to register a service in the services container</span>
</a>
<a class="api-item" href="#didiinterface-get">
<code class="vis vis-public">public</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sf">get</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$parameters</span><span class="sm"> = null</span></span>)</code>
<span class="desc">Resolves the service based on its configuration</span>
</a>
<a class="api-item" href="#didiinterface-getdefault">
<code class="vis vis-public">public</code>
<code class="ret">DiInterface|null</code>
<code class="sig"><span class="sf">getDefault</span>()</code>
<span class="desc">Return the last DI created</span>
</a>
<a class="api-item" href="#didiinterface-getraw">
<code class="vis vis-public">public</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sf">getRaw</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Returns a service definition without resolving</span>
</a>
<a class="api-item" href="#didiinterface-getservice">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface</code>
<code class="sig"><span class="sf">getService</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Returns the corresponding Phalcon\Di\Service instance for a service</span>
</a>
<a class="api-item" href="#didiinterface-getservices">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface[]</code>
<code class="sig"><span class="sf">getServices</span>()</code>
<span class="desc">Return the services registered in the DI</span>
</a>
<a class="api-item" href="#didiinterface-getshared">
<code class="vis vis-public">public</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sf">getShared</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$parameters</span><span class="sm"> = null</span></span>)</code>
<span class="desc">Returns a shared service based on their configuration</span>
</a>
<a class="api-item" href="#didiinterface-has">
<code class="vis vis-public">public</code>
<code class="ret">bool</code>
<code class="sig"><span class="sf">has</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Check whether the DI contains a service by a name</span>
</a>
<a class="api-item" href="#didiinterface-hasshared">
<code class="vis vis-public">public</code>
<code class="ret">bool</code>
<code class="sig"><span class="sf">hasShared</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Check whether the DI has a cached shared instance for a service name.</span>
</a>
<a class="api-item" href="#didiinterface-remove">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">remove</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Removes a service in the services container</span>
</a>
<a class="api-item" href="#didiinterface-removeshared">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">removeShared</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Removes the cached shared instance for a service, leaving the service</span>
</a>
<a class="api-item" href="#didiinterface-reset">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">reset</span>()</code>
<span class="desc">Resets the internal default DI</span>
</a>
<a class="api-item" href="#didiinterface-set">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface</code>
<code class="sig"><span class="sf">set</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$definition</span>,</span><span class="prm"><span class="st">bool</span> <span class="sv">$shared</span><span class="sm"> = false</span></span>)</code>
<span class="desc">Registers a service in the services container</span>
</a>
<a class="api-item" href="#didiinterface-setdefault">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">setDefault</span>( <span class="st">DiInterface</span> <span class="sv">$container</span> )</code>
<span class="desc">Set a default dependency injection container to be obtained into static</span>
</a>
<a class="api-item" href="#didiinterface-setservice">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface</code>
<code class="sig"><span class="sf">setService</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">ServiceInterface</span> <span class="sv">$rawDefinition</span></span>)</code>
<span class="desc">Sets a service using a raw Phalcon\Di\Service definition</span>
</a>
<a class="api-item" href="#didiinterface-setshared">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface</code>
<code class="sig"><span class="sf">setShared</span>(<span class="prm"><span class="st">string</span> <span class="sv">$name</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$definition</span></span>)</code>
<span class="desc">Registers an &quot;always shared&quot; service in the services container</span>
</a>
</div>

### Methods

<div class="api-group">Public · 16</div>

<h4 id="didiinterface-attempt"><code>attempt()</code></h4>

```php
public function attempt(
string $name,
mixed $definition,
bool $shared = false
): ServiceInterface|bool;
```

Attempts to register a service in the services container
Only is successful if a service hasn't been registered previously
with the same name

<h4 id="didiinterface-get"><code>get()</code></h4>

```php
public function get(
string $name,
mixed $parameters = null
): mixed;
```

Resolves the service based on its configuration

<h4 id="didiinterface-getdefault"><code>getDefault()</code></h4>

```php
public static function getDefault(): DiInterface|null;
```

Return the last DI created

<h4 id="didiinterface-getraw"><code>getRaw()</code></h4>

```php
public function getRaw( string $name ): mixed;
```

Returns a service definition without resolving

<h4 id="didiinterface-getservice"><code>getService()</code></h4>

```php
public function getService( string $name ): ServiceInterface;
```

Returns the corresponding Phalcon\Di\Service instance for a service

<h4 id="didiinterface-getservices"><code>getServices()</code></h4>

```php
public function getServices(): ServiceInterface[];
```

Return the services registered in the DI

<h4 id="didiinterface-getshared"><code>getShared()</code></h4>

```php
public function getShared(
string $name,
mixed $parameters = null
): mixed;
```

Returns a shared service based on their configuration

<h4 id="didiinterface-has"><code>has()</code></h4>

```php
public function has( string $name ): bool;
```

Check whether the DI contains a service by a name

<h4 id="didiinterface-hasshared"><code>hasShared()</code></h4>

```php
public function hasShared( string $name ): bool;
```

Check whether the DI has a cached shared instance for a service name.

Unlike `has()`, which reports on the service *definition* registry,
this method reports only on the resolved-instance cache populated by
`getShared()`. A service can be registered (`has()` returns true)
without yet having a shared instance (`hasShared()` returns false).

<h4 id="didiinterface-remove"><code>remove()</code></h4>

```php
public function remove( string $name ): void;
```

Removes a service in the services container

<h4 id="didiinterface-removeshared"><code>removeShared()</code></h4>

```php
public function removeShared( string $name ): void;
```

Removes the cached shared instance for a service, leaving the service
definition intact so the next `getShared()` call rebuilds it.

Useful in fork-based multi-process setups where a child inherits the
parent's resource handle (e.g. a database connection) and needs to
discard the cached instance without re-registering the service.

<h4 id="didiinterface-reset"><code>reset()</code></h4>

```php
public static function reset(): void;
```

Resets the internal default DI

<h4 id="didiinterface-set"><code>set()</code></h4>

```php
public function set(
string $name,
mixed $definition,
bool $shared = false
): ServiceInterface;
```

Registers a service in the services container

<h4 id="didiinterface-setdefault"><code>setDefault()</code></h4>

```php
public static function setDefault( DiInterface $container ): void;
```

Set a default dependency injection container to be obtained into static
methods

<h4 id="didiinterface-setservice"><code>setService()</code></h4>

```php
public function setService(
string $name,
ServiceInterface $rawDefinition
): ServiceInterface;
```

Sets a service using a raw Phalcon\Di\Service definition

<h4 id="didiinterface-setshared"><code>setShared()</code></h4>

```php
public function setShared(
string $name,
mixed $definition
): ServiceInterface;
```

Registers an "always shared" service in the services container

## Di\Exception

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exception.zep">Source on GitHub</a>

Exceptions thrown in Phalcon\Di will use this class

<div class="api-tree">

- `\Exception`
- **`Phalcon\Di\Exception`**
- [`Phalcon\Di\Exception\ServiceResolutionException`](#diexceptionserviceresolutionexception)
- [`Phalcon\Di\Exceptions\AliasAlreadyInUse`](#diexceptionsaliasalreadyinuse)
- [`Phalcon\Di\Exceptions\AliasNameMustBeString`](#diexceptionsaliasnamemustbestring)
- [`Phalcon\Di\Exceptions\ArgumentTypeRequired`](#diexceptionsargumenttyperequired)
- [`Phalcon\Di\Exceptions\CallArgumentsMustBeArray`](#diexceptionscallargumentsmustbearray)
- [`Phalcon\Di\Exceptions\CircularAliasReference`](#diexceptionscircularaliasreference)
- [`Phalcon\Di\Exceptions\ContainerRequired`](#diexceptionscontainerrequired)
- [`Phalcon\Di\Exceptions\DefinitionMustBeArrayForRead`](#diexceptionsdefinitionmustbearrayforread)
- [`Phalcon\Di\Exceptions\DefinitionMustBeArrayForUpdate`](#diexceptionsdefinitionmustbearrayforupdate)
- [`Phalcon\Di\Exceptions\MethodCallMustBeArray`](#diexceptionsmethodcallmustbearray)
- [`Phalcon\Di\Exceptions\MethodNameRequired`](#diexceptionsmethodnamerequired)
- [`Phalcon\Di\Exceptions\MissingClassNameParameter`](#diexceptionsmissingclassnameparameter)
- [`Phalcon\Di\Exceptions\MissingParameterKey`](#diexceptionsmissingparameterkey)
- [`Phalcon\Di\Exceptions\PropertyInjectionRequiresInstance`](#diexceptionspropertyinjectionrequiresinstance)
- [`Phalcon\Di\Exceptions\PropertyMustBeArray`](#diexceptionspropertymustbearray)
- [`Phalcon\Di\Exceptions\PropertyNameRequired`](#diexceptionspropertynamerequired)
- [`Phalcon\Di\Exceptions\PropertyValueRequired`](#diexceptionspropertyvaluerequired)
- [`Phalcon\Di\Exceptions\ServiceCannotBeResolved`](#diexceptionsservicecannotberesolved)
- [`Phalcon\Di\Exceptions\SetterInjectionRequiresInstance`](#diexceptionssetterinjectionrequiresinstance)
- [`Phalcon\Di\Exceptions\SetterParametersMustBeArray`](#diexceptionssetterparametersmustbearray)
- [`Phalcon\Di\Exceptions\UnknownServiceType`](#diexceptionsunknownservicetype)

</div>

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexception-servicecannotberesolved">
<code class="vis vis-public">public</code>
<code class="ret">Exception</code>
<code class="sig"><span class="sf">serviceCannotBeResolved</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
</a>
<a class="api-item" href="#diexception-servicenotfound">
<code class="vis vis-public">public</code>
<code class="ret">Exception</code>
<code class="sig"><span class="sf">serviceNotFound</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
</a>
<a class="api-item" href="#diexception-undefinedmethod">
<code class="vis vis-public">public</code>
<code class="ret">Exception</code>
<code class="sig"><span class="sf">undefinedMethod</span>( <span class="st">string</span> <span class="sv">$method</span> )</code>
</a>
<a class="api-item" href="#diexception-unknownserviceinparameter">
<code class="vis vis-public">public</code>
<code class="ret">Exception</code>
<code class="sig"><span class="sf">unknownServiceInParameter</span>( <span class="st">int</span> <span class="sv">$position</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 4</div>

<h4 id="diexception-servicecannotberesolved"><code>serviceCannotBeResolved()</code></h4>

```php
public static function serviceCannotBeResolved( string $name ): Exception;
```

<h4 id="diexception-servicenotfound"><code>serviceNotFound()</code></h4>

```php
public static function serviceNotFound( string $name ): Exception;
```

<h4 id="diexception-undefinedmethod"><code>undefinedMethod()</code></h4>

```php
public static function undefinedMethod( string $method ): Exception;
```

<h4 id="diexception-unknownserviceinparameter"><code>unknownServiceInParameter()</code></h4>

```php
public static function unknownServiceInParameter( int $position ): Exception;
```

## Di\Exception\ServiceResolutionException

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exception/ServiceResolutionException.zep">Source on GitHub</a>

Phalcon\Di\Exception\ServiceResolutionException

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exception\ServiceResolutionException`**

</div>

## Di\Exceptions\AliasAlreadyInUse

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/AliasAlreadyInUse.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\AliasAlreadyInUse`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionsaliasalreadyinuse-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>( <span class="st">string</span> <span class="sv">$alias</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionsaliasalreadyinuse-__construct"><code>__construct()</code></h4>

```php
public function __construct( string $alias );
```

## Di\Exceptions\AliasNameMustBeString

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/AliasNameMustBeString.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\AliasNameMustBeString`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionsaliasnamemustbestring-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>()</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionsaliasnamemustbestring-__construct"><code>__construct()</code></h4>

```php
public function __construct();
```

## Di\Exceptions\ArgumentTypeRequired

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/ArgumentTypeRequired.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\ArgumentTypeRequired`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionsargumenttyperequired-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>( <span class="st">int</span> <span class="sv">$position</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionsargumenttyperequired-__construct"><code>__construct()</code></h4>

```php
public function __construct( int $position );
```

## Di\Exceptions\CallArgumentsMustBeArray

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/CallArgumentsMustBeArray.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\CallArgumentsMustBeArray`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionscallargumentsmustbearray-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>( <span class="st">int</span> <span class="sv">$position</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionscallargumentsmustbearray-__construct"><code>__construct()</code></h4>

```php
public function __construct( int $position );
```

## Di\Exceptions\CircularAliasReference

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/CircularAliasReference.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\CircularAliasReference`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionscircularaliasreference-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionscircularaliasreference-__construct"><code>__construct()</code></h4>

```php
public function __construct( string $name );
```

## Di\Exceptions\ContainerRequired

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/ContainerRequired.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\ContainerRequired`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionscontainerrequired-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>()</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionscontainerrequired-__construct"><code>__construct()</code></h4>

```php
public function __construct();
```

## Di\Exceptions\DefinitionMustBeArrayForRead

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/DefinitionMustBeArrayForRead.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\DefinitionMustBeArrayForRead`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionsdefinitionmustbearrayforread-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>()</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionsdefinitionmustbearrayforread-__construct"><code>__construct()</code></h4>

```php
public function __construct();
```

## Di\Exceptions\DefinitionMustBeArrayForUpdate

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/DefinitionMustBeArrayForUpdate.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\DefinitionMustBeArrayForUpdate`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionsdefinitionmustbearrayforupdate-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>()</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionsdefinitionmustbearrayforupdate-__construct"><code>__construct()</code></h4>

```php
public function __construct();
```

## Di\Exceptions\MethodCallMustBeArray

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/MethodCallMustBeArray.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\MethodCallMustBeArray`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionsmethodcallmustbearray-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>( <span class="st">int</span> <span class="sv">$position</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionsmethodcallmustbearray-__construct"><code>__construct()</code></h4>

```php
public function __construct( int $position );
```

## Di\Exceptions\MethodNameRequired

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/MethodNameRequired.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\MethodNameRequired`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionsmethodnamerequired-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>( <span class="st">int</span> <span class="sv">$position</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionsmethodnamerequired-__construct"><code>__construct()</code></h4>

```php
public function __construct( int $position );
```

## Di\Exceptions\MissingClassNameParameter

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/MissingClassNameParameter.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\MissingClassNameParameter`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionsmissingclassnameparameter-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>()</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionsmissingclassnameparameter-__construct"><code>__construct()</code></h4>

```php
public function __construct();
```

## Di\Exceptions\MissingParameterKey

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/MissingParameterKey.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\MissingParameterKey`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionsmissingparameterkey-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>(<span class="prm"><span class="st">string</span> <span class="sv">$key</span>,</span><span class="prm"><span class="st">int</span> <span class="sv">$position</span></span>)</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionsmissingparameterkey-__construct"><code>__construct()</code></h4>

```php
public function __construct(
string $key,
int $position
);
```

## Di\Exceptions\PropertyInjectionRequiresInstance

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/PropertyInjectionRequiresInstance.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\PropertyInjectionRequiresInstance`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionspropertyinjectionrequiresinstance-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>()</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionspropertyinjectionrequiresinstance-__construct"><code>__construct()</code></h4>

```php
public function __construct();
```

## Di\Exceptions\PropertyMustBeArray

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/PropertyMustBeArray.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\PropertyMustBeArray`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionspropertymustbearray-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>( <span class="st">int</span> <span class="sv">$position</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionspropertymustbearray-__construct"><code>__construct()</code></h4>

```php
public function __construct( int $position );
```

## Di\Exceptions\PropertyNameRequired

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/PropertyNameRequired.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\PropertyNameRequired`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionspropertynamerequired-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>( <span class="st">int</span> <span class="sv">$position</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionspropertynamerequired-__construct"><code>__construct()</code></h4>

```php
public function __construct( int $position );
```

## Di\Exceptions\PropertyValueRequired

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/PropertyValueRequired.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\PropertyValueRequired`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionspropertyvaluerequired-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>( <span class="st">int</span> <span class="sv">$position</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionspropertyvaluerequired-__construct"><code>__construct()</code></h4>

```php
public function __construct( int $position );
```

## Di\Exceptions\ServiceCannotBeResolved

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/ServiceCannotBeResolved.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\ServiceCannotBeResolved`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionsservicecannotberesolved-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionsservicecannotberesolved-__construct"><code>__construct()</code></h4>

```php
public function __construct( string $name );
```

## Di\Exceptions\SetterInjectionRequiresInstance

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/SetterInjectionRequiresInstance.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\SetterInjectionRequiresInstance`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionssetterinjectionrequiresinstance-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>()</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionssetterinjectionrequiresinstance-__construct"><code>__construct()</code></h4>

```php
public function __construct();
```

## Di\Exceptions\SetterParametersMustBeArray

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/SetterParametersMustBeArray.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\SetterParametersMustBeArray`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionssetterparametersmustbearray-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>()</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionssetterparametersmustbearray-__construct"><code>__construct()</code></h4>

```php
public function __construct();
```

## Di\Exceptions\UnknownServiceType

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Exceptions/UnknownServiceType.zep">Source on GitHub</a>

<div class="api-tree">

- `\Exception`
- [`Phalcon\Di\Exception`](#diexception)
- **`Phalcon\Di\Exceptions\UnknownServiceType`**

</div>

__Uses__ `Phalcon\Di\Exception`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diexceptionsunknownservicetype-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>( <span class="st">int</span> <span class="sv">$position</span> )</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diexceptionsunknownservicetype-__construct"><code>__construct()</code></h4>

```php
public function __construct( int $position );
```

## Di\FactoryDefault

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/FactoryDefault.zep">Source on GitHub</a>

This is a variant of the standard Phalcon\Di\Di. By default it automatically
registers all the services provided by the framework. Thanks to this, the
developer does not need to register each service individually providing a
full stack framework

<div class="api-tree">

- [`Phalcon\Di\Di`](#didi)
- **`Phalcon\Di\FactoryDefault`**
- [`Phalcon\Di\FactoryDefault\Cli`](#difactorydefaultcli)

</div>

__Uses__ `Phalcon\Annotations\Adapter\Memory` · `Phalcon\Assets\Manager` · `Phalcon\Encryption\Crypt` · `Phalcon\Encryption\Security` · `Phalcon\Events\Manager` · `Phalcon\Filter\FilterFactory` · `Phalcon\Flash\Direct` · `Phalcon\Flash\Session` · `Phalcon\Html\Escaper` · `Phalcon\Html\TagFactory` · `Phalcon\Http\Request` · `Phalcon\Http\Response` · `Phalcon\Http\Response\Cookies` · `Phalcon\Mvc\Dispatcher` · `Phalcon\Mvc\Model\Manager` · `Phalcon\Mvc\Model\MetaData\Memory` · `Phalcon\Mvc\Model\Transaction\Manager` · `Phalcon\Mvc\Router` · `Phalcon\Mvc\Url` · `Phalcon\Queue\QueueFactory` · `Phalcon\Support\HelperFactory` · `Phalcon\Support\Settings`

### Method Summary

<div class="api-list">
<a class="api-item" href="#difactorydefault-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>()</code>
<span class="desc">Phalcon\Di\FactoryDefault constructor</span>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="difactorydefault-__construct"><code>__construct()</code></h4>

```php
public function __construct();
```

Phalcon\Di\FactoryDefault constructor

## Di\FactoryDefault\Cli

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/FactoryDefault/Cli.zep">Source on GitHub</a>

Phalcon\Di\FactoryDefault\Cli

This is a variant of the standard Phalcon\Di. By default it automatically
registers all the services provided by the framework.
Thanks to this, the developer does not need to register each service individually.
This class is specially suitable for CLI applications

<div class="api-tree">

- [`Phalcon\Di\Di`](#didi)
- [`Phalcon\Di\FactoryDefault`](#difactorydefault)
- **`Phalcon\Di\FactoryDefault\Cli`**

</div>

__Uses__ `Phalcon\Annotations\Adapter\Memory` · `Phalcon\Cli\Dispatcher` · `Phalcon\Cli\Router` · `Phalcon\Di\FactoryDefault` · `Phalcon\Di\Service` · `Phalcon\Encryption\Security` · `Phalcon\Events\Manager` · `Phalcon\Filter\FilterFactory` · `Phalcon\Html\Escaper` · `Phalcon\Html\TagFactory` · `Phalcon\Mvc\Model\Manager` · `Phalcon\Mvc\Model\MetaData\Memory` · `Phalcon\Mvc\Model\Transaction\Manager` · `Phalcon\Queue\QueueFactory` · `Phalcon\Support\HelperFactory` · `Phalcon\Support\Settings`

### Method Summary

<div class="api-list">
<a class="api-item" href="#difactorydefaultcli-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>()</code>
<span class="desc">Phalcon\Di\FactoryDefault\Cli constructor</span>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="difactorydefaultcli-__construct"><code>__construct()</code></h4>

```php
public function __construct();
```

Phalcon\Di\FactoryDefault\Cli constructor

## Di\InitializationAwareInterface

<span class="badge badge--interface">Interface</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/InitializationAwareInterface.zep">Source on GitHub</a>

Interface for components that have `initialize()`

<div class="api-tree">

- **`Phalcon\Di\InitializationAwareInterface`**

</div>

### Method Summary

<div class="api-list">
<a class="api-item" href="#diinitializationawareinterface-initialize">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">initialize</span>()</code>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diinitializationawareinterface-initialize"><code>initialize()</code></h4>

```php
public function initialize(): void;
```

## Di\Injectable

<span class="badge badge--abstract">Abstract</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Injectable.zep">Source on GitHub</a>

This class allows to access services in the services container by just only
accessing a public property with the same name of a registered service

@property \Phalcon\Mvc\Dispatcher|\Phalcon\Mvc\DispatcherInterface $dispatcher
@property \Phalcon\Mvc\Router|\Phalcon\Mvc\RouterInterface $router
@property \Phalcon\Mvc\Url|\Phalcon\Mvc\Url\UrlInterface $url
@property \Phalcon\Http\Request|\Phalcon\Http\RequestInterface $request
@property \Phalcon\Http\Response|\Phalcon\Http\ResponseInterface $response
@property \Phalcon\Http\Response\Cookies|\Phalcon\Http\Response\CookiesInterface $cookies
@property \Phalcon\Filter\Filter $filter
@property \Phalcon\Flash\Direct $flash
@property \Phalcon\Flash\Session $flashSession
@property \Phalcon\Session\ManagerInterface $session
@property \Phalcon\Events\Manager|\Phalcon\Events\ManagerInterface $eventsManager
@property \Phalcon\Db\Adapter\AdapterInterface $db
@property \Phalcon\Encryption\Security $security
@property \Phalcon\Encryption\Crypt|\Phalcon\Encryption\Crypt\CryptInterface $crypt
@property \Phalcon\Html\TagFactory $tag
@property \Phalcon\Html\Escaper|\Phalcon\Html\Escaper\EscaperInterface $escaper
@property \Phalcon\Annotations\Adapter\Memory|\Phalcon\Annotations\Adapter $annotations
@property \Phalcon\Mvc\Model\Manager|\Phalcon\Mvc\Model\ManagerInterface $modelsManager
@property \Phalcon\Mvc\Model\MetaData\Memory|\Phalcon\Mvc\Model\MetadataInterface $modelsMetadata
@property \Phalcon\Mvc\Model\Transaction\Manager|\Phalcon\Mvc\Model\Transaction\ManagerInterface $transactionManager
@property \Phalcon\Support\Settings $settings
@property \Phalcon\Assets\Manager $assets
@property \Phalcon\Di\Di|\Phalcon\Di\DiInterface $di
@property \Phalcon\Session\Bag|\Phalcon\Session\BagInterface $persistent
@property \Phalcon\Mvc\View|\Phalcon\Mvc\ViewInterface $view

<div class="api-tree">

- `\stdClass`
- **`Phalcon\Di\Injectable`** - implements [`Phalcon\Di\InjectionAwareInterface`](#diinjectionawareinterface)
- [`Phalcon\Application\AbstractApplication`](/5.19/api/phalcon_application/#applicationabstractapplication)
- [`Phalcon\Cli\Task`](/5.19/api/phalcon_cli/#clitask)
- [`Phalcon\Filter\Validation`](/5.19/api/phalcon_filter/#filtervalidation)
- [`Phalcon\Forms\Form`](/5.19/api/phalcon_forms/#formsform)
- [`Phalcon\Mvc\Controller`](/5.19/api/phalcon_mvc/#mvccontroller)
- [`Phalcon\Mvc\Micro`](/5.19/api/phalcon_mvc/#mvcmicro)
- [`Phalcon\Mvc\View`](/5.19/api/phalcon_mvc/#mvcview)
- [`Phalcon\Mvc\View\Engine\AbstractEngine`](/5.19/api/phalcon_mvc/#mvcviewengineabstractengine)
- [`Phalcon\Mvc\View\Simple`](/5.19/api/phalcon_mvc/#mvcviewsimple)

</div>

__Uses__ `Phalcon\Di\Di` · `Phalcon\Di\Exceptions\ContainerRequired` · `Phalcon\Session\BagInterface` · `stdClass`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diinjectable-__get">
<code class="vis vis-public">public</code>
<code class="ret">mixed|null</code>
<code class="sig"><span class="sf">__get</span>( <span class="st">string</span> <span class="sv">$propertyName</span> )</code>
<span class="desc">Magic method __get</span>
</a>
<a class="api-item" href="#diinjectable-__isset">
<code class="vis vis-public">public</code>
<code class="ret">bool</code>
<code class="sig"><span class="sf">__isset</span>( <span class="st">string</span> <span class="sv">$name</span> )</code>
<span class="desc">Magic method __isset</span>
</a>
<a class="api-item" href="#diinjectable-getdi">
<code class="vis vis-public">public</code>
<code class="ret">DiInterface</code>
<code class="sig"><span class="sf">getDI</span>()</code>
<span class="desc">Returns the internal dependency injector</span>
</a>
<a class="api-item" href="#diinjectable-setdi">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">setDI</span>( <span class="st">DiInterface</span> <span class="sv">$container</span> )</code>
<span class="desc">Sets the dependency injector</span>
</a>
</div>

### Properties

<div class="api-list">
<div class="api-item">
<code class="vis vis-protected">protected</code>
<code class="ret">DiInterface|null</code>
<code class="sig"><span class="sv">$container</span><span class="sm"> = null</span></code>
<span class="desc">Dependency Injector</span>
</div>
</div>

### Methods

<div class="api-group">Public · 4</div>

<h4 id="diinjectable-__get"><code>__get()</code></h4>

```php
public function __get( string $propertyName ): mixed|null;
```

Magic method __get

<h4 id="diinjectable-__isset"><code>__isset()</code></h4>

```php
public function __isset( string $name ): bool;
```

Magic method __isset

<h4 id="diinjectable-getdi"><code>getDI()</code></h4>

```php
public function getDI(): DiInterface;
```

Returns the internal dependency injector

<h4 id="diinjectable-setdi"><code>setDI()</code></h4>

```php
public function setDI( DiInterface $container ): void;
```

Sets the dependency injector

## Di\InjectionAwareInterface

<span class="badge badge--interface">Interface</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/InjectionAwareInterface.zep">Source on GitHub</a>

This interface must be implemented in those classes that uses internally the
Phalcon\Di\Di that creates them

<div class="api-tree">

- **`Phalcon\Di\InjectionAwareInterface`**

</div>

### Method Summary

<div class="api-list">
<a class="api-item" href="#diinjectionawareinterface-getdi">
<code class="vis vis-public">public</code>
<code class="ret">DiInterface</code>
<code class="sig"><span class="sf">getDI</span>()</code>
<span class="desc">Returns the internal dependency injector</span>
</a>
<a class="api-item" href="#diinjectionawareinterface-setdi">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">setDI</span>( <span class="st">DiInterface</span> <span class="sv">$container</span> )</code>
<span class="desc">Sets the dependency injector</span>
</a>
</div>

### Methods

<div class="api-group">Public · 2</div>

<h4 id="diinjectionawareinterface-getdi"><code>getDI()</code></h4>

```php
public function getDI(): DiInterface;
```

Returns the internal dependency injector

<h4 id="diinjectionawareinterface-setdi"><code>setDI()</code></h4>

```php
public function setDI( DiInterface $container ): void;
```

Sets the dependency injector

## Di\Service

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Service.zep">Source on GitHub</a>

Represents individually a service in the services container

```php
$service = new \Phalcon\Di\Service(
"request",
\Phalcon\Http\Request::class
);

$request = service->resolve();
```

<div class="api-tree">

- **`Phalcon\Di\Service`** - implements [`Phalcon\Di\ServiceInterface`](#diserviceinterface)

</div>

__Uses__ `Closure` · `Phalcon\Di\Exception\ServiceResolutionException` · `Phalcon\Di\Exceptions\DefinitionMustBeArrayForRead` · `Phalcon\Di\Exceptions\DefinitionMustBeArrayForUpdate` · `Phalcon\Di\Service\Builder`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diservice-__construct">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">__construct</span>(<span class="prm"><span class="st">mixed</span> <span class="sv">$definition</span>,</span><span class="prm"><span class="st">bool</span> <span class="sv">$shared</span><span class="sm"> = false</span></span>)</code>
<span class="desc">Phalcon\Di\Service</span>
</a>
<a class="api-item" href="#diservice-getdefinition">
<code class="vis vis-public">public</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sf">getDefinition</span>()</code>
<span class="desc">Returns the service definition</span>
</a>
<a class="api-item" href="#diservice-getparameter">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">getParameter</span>( <span class="st">int</span> <span class="sv">$position</span> )</code>
<span class="desc">Returns a parameter in a specific position</span>
</a>
<a class="api-item" href="#diservice-isresolved">
<code class="vis vis-public">public</code>
<code class="ret">bool</code>
<code class="sig"><span class="sf">isResolved</span>()</code>
<span class="desc">Returns true if the service was resolved</span>
</a>
<a class="api-item" href="#diservice-isshared">
<code class="vis vis-public">public</code>
<code class="ret">bool</code>
<code class="sig"><span class="sf">isShared</span>()</code>
<span class="desc">Check whether the service is shared or not</span>
</a>
<a class="api-item" href="#diservice-resolve">
<code class="vis vis-public">public</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sf">resolve</span>(<span class="prm"><span class="st">mixed</span> <span class="sv">$parameters</span><span class="sm"> = null</span>,</span><span class="prm"><span class="st">DiInterface|null</span> <span class="sv">$container</span><span class="sm"> = null</span></span>)</code>
<span class="desc">Resolves the service</span>
</a>
<a class="api-item" href="#diservice-setdefinition">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">setDefinition</span>( <span class="st">mixed</span> <span class="sv">$definition</span> )</code>
<span class="desc">Set the service definition</span>
</a>
<a class="api-item" href="#diservice-setparameter">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface</code>
<code class="sig"><span class="sf">setParameter</span>(<span class="prm"><span class="st">int</span> <span class="sv">$position</span>,</span><span class="prm"><span class="st">array</span> <span class="sv">$parameter</span></span>)</code>
<span class="desc">Changes a parameter in the definition without resolve the service</span>
</a>
<a class="api-item" href="#diservice-setshared">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">setShared</span>( <span class="st">bool</span> <span class="sv">$shared</span> )</code>
<span class="desc">Sets if the service is shared or not</span>
</a>
<a class="api-item" href="#diservice-setsharedinstance">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">setSharedInstance</span>( <span class="st">mixed</span> <span class="sv">$sharedInstance</span> )</code>
<span class="desc">Sets/Resets the shared instance related to the service</span>
</a>
</div>

### Properties

<div class="api-list">
<div class="api-item">
<code class="vis vis-protected">protected</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sv">$definition</span></code>
</div>
<div class="api-item">
<code class="vis vis-protected">protected</code>
<code class="ret">bool</code>
<code class="sig"><span class="sv">$resolved</span><span class="sm"> = false</span></code>
</div>
<div class="api-item">
<code class="vis vis-protected">protected</code>
<code class="ret">bool</code>
<code class="sig"><span class="sv">$shared</span><span class="sm"> = false</span></code>
</div>
<div class="api-item">
<code class="vis vis-protected">protected</code>
<code class="ret">mixed|null</code>
<code class="sig"><span class="sv">$sharedInstance</span><span class="sm"> = null</span></code>
</div>
</div>

### Methods

<div class="api-group">Public · 10</div>

<h4 id="diservice-__construct"><code>__construct()</code></h4>

```php
final public function __construct(
mixed $definition,
bool $shared = false
);
```

Phalcon\Di\Service

<h4 id="diservice-getdefinition"><code>getDefinition()</code></h4>

```php
public function getDefinition(): mixed;
```

Returns the service definition

<h4 id="diservice-getparameter"><code>getParameter()</code></h4>

```php
public function getParameter( int $position );
```

Returns a parameter in a specific position

<h4 id="diservice-isresolved"><code>isResolved()</code></h4>

```php
public function isResolved(): bool;
```

Returns true if the service was resolved

<h4 id="diservice-isshared"><code>isShared()</code></h4>

```php
public function isShared(): bool;
```

Check whether the service is shared or not

<h4 id="diservice-resolve"><code>resolve()</code></h4>

```php
public function resolve(
mixed $parameters = null,
DiInterface|null $container = null
): mixed;
```

Resolves the service

<h4 id="diservice-setdefinition"><code>setDefinition()</code></h4>

```php
public function setDefinition( mixed $definition ): void;
```

Set the service definition

<h4 id="diservice-setparameter"><code>setParameter()</code></h4>

```php
public function setParameter(
int $position,
array $parameter
): ServiceInterface;
```

Changes a parameter in the definition without resolve the service

<h4 id="diservice-setshared"><code>setShared()</code></h4>

```php
public function setShared( bool $shared ): void;
```

Sets if the service is shared or not

<h4 id="diservice-setsharedinstance"><code>setSharedInstance()</code></h4>

```php
public function setSharedInstance( mixed $sharedInstance ): void;
```

Sets/Resets the shared instance related to the service

## Di\ServiceInterface

<span class="badge badge--interface">Interface</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/ServiceInterface.zep">Source on GitHub</a>

Represents a service in the services container

<div class="api-tree">

- **`Phalcon\Di\ServiceInterface`**

</div>

### Method Summary

<div class="api-list">
<a class="api-item" href="#diserviceinterface-getdefinition">
<code class="vis vis-public">public</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sf">getDefinition</span>()</code>
<span class="desc">Returns the service definition</span>
</a>
<a class="api-item" href="#diserviceinterface-getparameter">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">getParameter</span>( <span class="st">int</span> <span class="sv">$position</span> )</code>
<span class="desc">Returns a parameter in a specific position</span>
</a>
<a class="api-item" href="#diserviceinterface-isresolved">
<code class="vis vis-public">public</code>
<code class="ret">bool</code>
<code class="sig"><span class="sf">isResolved</span>()</code>
<span class="desc">Returns true if the service was resolved</span>
</a>
<a class="api-item" href="#diserviceinterface-isshared">
<code class="vis vis-public">public</code>
<code class="ret">bool</code>
<code class="sig"><span class="sf">isShared</span>()</code>
<span class="desc">Check whether the service is shared or not</span>
</a>
<a class="api-item" href="#diserviceinterface-resolve">
<code class="vis vis-public">public</code>
<code class="ret">mixed</code>
<code class="sig"><span class="sf">resolve</span>(<span class="prm"><span class="st">mixed</span> <span class="sv">$parameters</span><span class="sm"> = null</span>,</span><span class="prm"><span class="st">DiInterface|null</span> <span class="sv">$container</span><span class="sm"> = null</span></span>)</code>
<span class="desc">Resolves the service</span>
</a>
<a class="api-item" href="#diserviceinterface-setdefinition">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">setDefinition</span>( <span class="st">mixed</span> <span class="sv">$definition</span> )</code>
<span class="desc">Set the service definition</span>
</a>
<a class="api-item" href="#diserviceinterface-setparameter">
<code class="vis vis-public">public</code>
<code class="ret">ServiceInterface</code>
<code class="sig"><span class="sf">setParameter</span>(<span class="prm"><span class="st">int</span> <span class="sv">$position</span>,</span><span class="prm"><span class="st">array</span> <span class="sv">$parameter</span></span>)</code>
<span class="desc">Changes a parameter in the definition without resolve the service</span>
</a>
<a class="api-item" href="#diserviceinterface-setshared">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">setShared</span>( <span class="st">bool</span> <span class="sv">$shared</span> )</code>
<span class="desc">Sets if the service is shared or not</span>
</a>
</div>

### Methods

<div class="api-group">Public · 8</div>

<h4 id="diserviceinterface-getdefinition"><code>getDefinition()</code></h4>

```php
public function getDefinition(): mixed;
```

Returns the service definition

<h4 id="diserviceinterface-getparameter"><code>getParameter()</code></h4>

```php
public function getParameter( int $position );
```

Returns a parameter in a specific position

<h4 id="diserviceinterface-isresolved"><code>isResolved()</code></h4>

```php
public function isResolved(): bool;
```

Returns true if the service was resolved

<h4 id="diserviceinterface-isshared"><code>isShared()</code></h4>

```php
public function isShared(): bool;
```

Check whether the service is shared or not

<h4 id="diserviceinterface-resolve"><code>resolve()</code></h4>

```php
public function resolve(
mixed $parameters = null,
DiInterface|null $container = null
): mixed;
```

Resolves the service

<h4 id="diserviceinterface-setdefinition"><code>setDefinition()</code></h4>

```php
public function setDefinition( mixed $definition );
```

Set the service definition

<h4 id="diserviceinterface-setparameter"><code>setParameter()</code></h4>

```php
public function setParameter(
int $position,
array $parameter
): ServiceInterface;
```

Changes a parameter in the definition without resolve the service

<h4 id="diserviceinterface-setshared"><code>setShared()</code></h4>

```php
public function setShared( bool $shared );
```

Sets if the service is shared or not

## Di\ServiceProviderInterface

<span class="badge badge--interface">Interface</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/ServiceProviderInterface.zep">Source on GitHub</a>

Should be implemented by service providers, or such components, which
register a service in the service container.

```php
namespace Acme;

use Phalcon\Di\DiInterface;
use Phalcon\Di\ServiceProviderInterface;

class SomeServiceProvider implements ServiceProviderInterface
{
public function register(DiInterface $di)
{
    $di->setShared(
        'service',
        function () {
            // ...
        }
    );
}
}
```

<div class="api-tree">

- **`Phalcon\Di\ServiceProviderInterface`**

</div>

### Method Summary

<div class="api-list">
<a class="api-item" href="#diserviceproviderinterface-register">
<code class="vis vis-public">public</code>
<code class="ret">void</code>
<code class="sig"><span class="sf">register</span>( <span class="st">DiInterface</span> <span class="sv">$di</span> )</code>
<span class="desc">Registers a service provider.</span>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diserviceproviderinterface-register"><code>register()</code></h4>

```php
public function register( DiInterface $di ): void;
```

Registers a service provider.

## Di\Service\Builder

<span class="badge badge--class">Class</span>
<a class="src-btn" href="https://github.com/phalcon/cphalcon/blob/5.0.x/phalcon/Di/Service/Builder.zep">Source on GitHub</a>

Phalcon\Di\Service\Builder

This class builds instances based on complex definitions

<div class="api-tree">

- **`Phalcon\Di\Service\Builder`**

</div>

__Uses__ `Phalcon\Di\DiInterface` · `Phalcon\Di\Exception` · `Phalcon\Di\Exceptions\ArgumentTypeRequired` · `Phalcon\Di\Exceptions\CallArgumentsMustBeArray` · `Phalcon\Di\Exceptions\MethodCallMustBeArray` · `Phalcon\Di\Exceptions\MethodNameRequired` · `Phalcon\Di\Exceptions\MissingClassNameParameter` · `Phalcon\Di\Exceptions\MissingParameterKey` · `Phalcon\Di\Exceptions\PropertyInjectionRequiresInstance` · `Phalcon\Di\Exceptions\PropertyMustBeArray` · `Phalcon\Di\Exceptions\PropertyNameRequired` · `Phalcon\Di\Exceptions\PropertyValueRequired` · `Phalcon\Di\Exceptions\SetterInjectionRequiresInstance` · `Phalcon\Di\Exceptions\SetterParametersMustBeArray` · `Phalcon\Di\Exceptions\UnknownServiceType`

### Method Summary

<div class="api-list">
<a class="api-item" href="#diservicebuilder-build">
<code class="vis vis-public">public</code>
<code class="sig"><span class="sf">build</span>(<span class="prm"><span class="st">DiInterface</span> <span class="sv">$container</span>,</span><span class="prm"><span class="st">array</span> <span class="sv">$definition</span>,</span><span class="prm"><span class="st">mixed</span> <span class="sv">$parameters</span><span class="sm"> = null</span></span>)</code>
<span class="desc">Builds a service using a complex service definition</span>
</a>
</div>

### Methods

<div class="api-group">Public · 1</div>

<h4 id="diservicebuilder-build"><code>build()</code></h4>

```php
public function build(
DiInterface $container,
array $definition,
mixed $parameters = null
);
```

Builds a service using a complex service definition

Source: https://docs.phalcon.io/5.19/api/phalcon_di/index.mdx
