code: def instantiate_from_data(self, object_data):
          
          if isinstance(object_data, dict) and 'name' in object_data:
              name = object_data['name']
              module = importlib.import_module(name)
              return self.resolve_and_call(module.create, extra_env=object_data)
          if isinstance(object_data, dict) and 'factory' in object_data:
              factory = object_data['factory']
              module = importlib.import_module(factory)
              params = self.resolve_parameters(module.create, extra_env=object_data)
              return GenericFactory(module.create, params)
          elif isinstance(object_data, dict):
              return {k: self.instantiate_from_data(v) for k, v in object_data.items()}
          elif isinstance(object_data, list):
              return [self.instantiate_from_data(x) for x in object_data]
          elif isinstance(object_data, Variable):
              return object_data.resolve(self.parameters)
          else:
              return object_data
docs: Instantiate object from the supplied data, additional args may come from the environment