/**
  * Build a model, pre-initializing its metadata and its source.
  *
  * By default, the name of the "obj type" (the model class name) is used to determine the metadata ident to load.
  * To load a custom metadata for the object, use the `$metadataIdent` argument.
  *
  * By default, the object's _default_ source (from its metadata) is used as source.
  * To load a custom source for the object, use the `$sourceIdent` argument.
  *
  * @param string      $objType       The object type of the Model.
  * @param string|null $metadataIdent Optional. The metadata ident of the object.
  * @param string|null $sourceIdent   Optional. The custom source ident to load as source.
  * @return ModelInterface
  */
 public function build($objType, $metadataIdent = null, $sourceIdent = null)
 {
     $metadata = $this->createMetadata($objType, $metadataIdent);
     $source = $this->createSource($metadata, $sourceIdent);
     $args = array_merge($this->factory->arguments(), ['metadata' => $metadata, 'source' => $source]);
     $model = $this->factory->create($objType, $args);
     $model->source()->setModel($model);
     return $model;
 }