framework/di/Container.php
public function set($class, $definition = [], array $params = [])
    {
        $this->_definitions[$class] = $this->normalizeDefinition($class, $definition);
        $this->_params[$class] = $params;
        unset($this->_singletons[$class]);
        return $this;
    }
public function set($class, $definition = [], array $params = [])
    {
        $this->_definitions[$class] = $this->normalizeDefinition($class, $definition);
        $this->_params[$class] = $params;
        unset($this->_singletons[$class]);
        return $this;
    }
Registers a class definition with this container.

For example,

```php
// register a class name as is. This can be skipped.
$container->set('yii\db\Connection');

// register an interface
// When a class depends on the interface, the corresponding class
// will be instantiated as the dependent object
$container->set('yii\mail\MailInterface', 'yii\swiftmailer\Mailer');

// register an alias name. You can use $container->get('foo')
// to create an instance of Connection
$container->set('foo', 'yii\db\Connection');

// register a class with configuration. The configuration
// will be applied when the class is instantiated by get()
$container->set('yii\db\Connection', [
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]);

// register an alias name with class configuration
// In this case, a "class" element is required to specify the class
$container->set('db', [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]);

// register a PHP callable
// The callable will be executed when $container->get('db') is called
$container->set('db', function ($container, $params, $config) {
return new \yii\db\Connection($config);
});
```

If a class definition with the same name already exists, it will be overwritten with the new one.
You may use [[has()]] to check if a class definition already exists.

@param string $class class name, interface name or alias name
@param mixed $definition the definition associated with `$class`. It can be one of the following:

- a PHP callable: The callable will be executed when [[get()]] is invoked. The signature of the callable
should be `function ($container, $params, $config)`, where `$params` stands for the list of constructor
parameters, `$config` the object configuration, and `$container` the container object. The return value
of the callable will be returned by [[get()]] as the object instance requested.
- a configuration array: the array contains name-value pairs that will be used to initialize the property
values of the newly created object when [[get()]] is called. The `class` element stands for the
the class of the object to be created. If `class` is not specified, `$class` will be used as the class name.
- a string: a class name, an interface name or an alias name.
@param array $params the list of constructor parameters. The parameters will be passed to the class
constructor when [[get()]] is called.
@return $this the container itself