public function getTableModelDi() {
		if ($this->_modelDi !== null) {
			return $this->_modelDi;
		}
		
		if (self::$_allowSharedModelDi && self::$_sharedModelsDi !== null) {
			return self::$_sharedModelsDi;
		}
		
		// If has a locator, try to using it
		if ($this->hasLocator()) {
			$locator = $this->getLocator();
			
			// If has the models dependency injector in the locator
			if ($locator->has('modelsDi')) {
				$di = $locator->get('modelsDi');
				
				self::$_allowSharedModelDi = false;
			}
			// If not, create it
			else {
				$di = new Di();
				
				// If possible. pass the dependencies definitions
				if ($locator instanceof DiInterface) {
					if ($locator->has(self::PHSRV_MANAGER)) {
						$di->setRaw(self::PHSRV_MANAGER, $locator->getRaw(self::PHSRV_MANAGER));
					}

					if ($locator->has(self::PHSRV_META)) {
						$di->setRaw(self::PHSRV_META, $locator->getRaw(self::PHSRV_META));
					}
				}
				// If not, pass the dependencies instances
				else {
					if ($locator->has(self::PHSRV_MANAGER)) {
						$di->set(self::PHSRV_MANAGER, $locator->get(self::PHSRV_MANAGER), true);
					}

					if ($locator->has(self::PHSRV_META)) {
						$di->set(self::PHSRV_META, $locator->get(self::PHSRV_META), true);
					}
				}
			}
		} 
		// If not, create it
		else {
			$di = new Di();
		}

		// Making shure, that all the dependencies are present:
	
		if (! $di->has(self::PHSRV_ADAPTER)) {
			$di->set(self::PHSRV_ADAPTER, function() {
				return $this->getAdapter();
			}, true);
		}
		
		if (! $di->has(self::PHSRV_MANAGER)) {
			$di->set(self::PHSRV_MANAGER, function() {
				return new ModelsManager();
			}, true);
		}

		if (! $di->has(self::PHSRV_META)) {
			$di->set(self::PHSRV_META, function() {
				return new MetaData();
			}, true);
		}
		
		if (self::$_allowSharedModelDi && self::$_sharedModelsDi === null) {
			self::$_sharedModelsDi = $di;
		}

		$this->_modelDi = $di;
		
		return $di;
	}