class_docstr: Abstraction to provide values in dependency chain.
  
  Dependency injection is done through the factory functions, where the function
  can contain annotated argument which would be injected from the dependency
  module. Thus both the (argument) name and the type annotation matters.
  
  Provider defines `match` method to tell if the (name, type_hint) can be
  provided from this instance, and `make_factory` method to build a dependency
  injectable factory function.
class_docstr_tok: ["Abstraction","to","provide","values","in","dependency","chain",".","Dependency","injection","is","done","through","the","factory","functions",",","where","the","function","can","contain","annotated","argument","which","would","be","injected","from","the","dependency","module",".","Thus","both","the","(","argument",")","name","and","the","type","annotation","matters",".","Provider","defines","`","match","`","method","to","tell","if","the","(","name",",","type_hint",")","can","be","provided","from","this","instance",",","and","`","make_factory","`","method","to","build","a","dependency","injectable","factory","function","."]
docstr: Build factory class for providing values.
  
  The factory class can contain additional dependency requests with argument
  type annotations. Both argument name and the argument type matters.
  
  Factory function may raise FalseMatchError to indicate the match was
  actually False, and needs to lookup for other providers.
  
  Cyclic depedency would result in infinite recursive call thus not allowed.
  
  Args:
    name: A name of the injection argument.
    type_hint: A type hint for the injection argument.
docstr_tok: ["Build","factory","class","for","providing","values",".","The","factory","class","can","contain","additional","dependency","requests","with","argument","type","annotations",".","Both","argument","name","and","the","argument","type","matters",".","Factory","function","may","raise","FalseMatchError","to","indicate","the","match","was","actually","False",",","and","needs","to","lookup","for","other","providers",".","Cyclic","depedency","would","result","in","infinite","recursive","call","thus","not","allowed",".","Args",":","name",":","A","name","of","the","injection","argument",".","type_hint",":","A","type","hint","for","the","injection","argument","."]
code: def make_factory(
      self, name: str, type_hint: Any
  ) -> Callable[..., _T]:
      """Build factory class for providing values.
  
      The factory class can contain additional dependency requests with argument
      type annotations. Both argument name and the argument type matters.
  
      Factory function may raise FalseMatchError to indicate the match was
      actually False, and needs to lookup for other providers.
  
      Cyclic depedency would result in infinite recursive call thus not allowed.
  
      Args:
        name: A name of the injection argument.
        type_hint: A type hint for the injection argument.
      """
      pass
  
imports: import abc
  import functools
  import inspect
  import sys
  from typing import Any, Callable, Generic, Optional, TypeVar, Union, get_args, get_origin
  from tfx.utils import pure_typing_utils
label_desc: Use image node_id 2 for calling the Provider obj's underlying member method code with example usage: obj.make_factory(name, type_hint) without return types