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: Whether the requested (name, type_hint) can be provided by self.
docstr_tok: ["Whether","the","requested","(","name",",","type_hint",")","can","be","provided","by","self","."]
code: def match(self, name: str, type_hint: Any) -> bool:
      """Whether the requested (name, type_hint) can be provided by self."""
      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 1 for calling the Provider obj's underlying member method code with example usage: obj.match(name, type_hint) without return types