code: def inject(*args, **kwargs):
      
      def wrapper(obj):
          if inspect.isclass(obj) or callable(obj):
              _inject_object(obj, *args, **kwargs)
              return obj
          raise DiayException("Don't know how to inject into %r" % obj)
      return wrapper
docs: Mark a class or function for injection, meaning that a DI container knows
      that it should inject dependencies into it.
  
      Normally you won't need this as the injector will inject the required
      arguments anyway, but it can be used to inject properties into a class
      without having to specify it in the constructor, or to inject arguments
      that aren't properly type hinted.
  
      Example:
          @diay.inject('foo', MyClass)
          class MyOtherClass: pass
          assert isinstance(injector.get(MyOtherClass).foo, MyClass)