code: def inject(self, inst, **renames):
          
          if renames:
              di = self.clone(**renames)
          else:
              di = self
          pro = di._provides
          inst.__injections_source__ = di
          deps = getattr(inst, '__injections__', None)
          if deps:
              for attr, dep in deps.items():
                  val = pro.get(dep.name)
                  if val is None:
                      raise MissingDependencyError(dep.name)
  
                  if not isinstance(val, dep.type):
                      raise TypeError("Wrong provider for {!r}".format(val))
                  setattr(inst, attr, val)
          meth = getattr(inst, '__injected__', None)
          if meth is not None:
              meth()
          return inst
docs: Injects dependencies and propagates dependency injector