Inject, Factory and Injects¶
Ravyn dependency injection system is actually pretty simple and can be checked in the official dependency injection section for more details.
from ravyn import Inject, Injects, Factory
ravyn.Inject
¶
Inject(dependency, use_cache=False, **kwargs)
Bases: ArbitraryHashableBaseModel
Ravyn's dependency injector built on Lilya's dependency system internally. Keeps full backward compatibility with the old behavior and interface.
Source code in ravyn/injector.py
79 80 81 82 83 84 85 | |
model_config
class-attribute
instance-attribute
¶
model_config = ConfigDict(
extra="allow", arbitrary_types_allowed=True
)
__call__
async
¶
__call__(**kwargs)
Source code in ravyn/injector.py
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | |
__eq__
¶
__eq__(other)
Source code in ravyn/injector.py
104 105 106 107 108 109 110 | |
__hash__
¶
__hash__()
Source code in ravyn/injector.py
112 113 114 115 116 117 118 119 120 | |
- "!^model_config"
- "!^__hash__"
- "!^__call__"
- "!^__eq__"
ravyn.Injects
¶
Injects(
default=Undefined,
skip_validation=False,
allow_none=True,
)
Bases: FieldInfo
Creates a FieldInfo class with extra parameters. This is used for dependencies and to inject them.
Example
@get(dependencies={"value": Inject(lambda: 13)})
def myview(value: Injects()):
return {"value": value}
Source code in ravyn/injector.py
137 138 139 140 141 142 143 144 145 146 147 148 149 | |
- "!^model_config"
- "!^__hash__"
- "!^__call__"
- "!^__eq__"
ravyn.Factory
¶
Factory(provides, *args, **kwargs)
A dependency injection factory that supports both positional and keyword arguments.
The provider can be passed as either: - A direct callable - A string reference to be dynamically imported
Example Usage
dependencies = { "user": Factory(UserDAO, db_session=session, cache=cache) }
Source code in ravyn/injector.py
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | |
set_args
¶
set_args(*args, **kwargs)
Set or update arguments dynamically.
Source code in ravyn/injector.py
43 44 45 46 | |
__call__
async
¶
__call__()
Instantiates the provided class/function, handling both sync and async cases.
Supports
- Nested imports (e.g., MyClass.func, MyClass.SubClass.func)
- Both sync and async callables
- Positional and keyword arguments
Example
Factory(UserDAO, db_session=session)
Source code in ravyn/injector.py
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | |
- "!^model_config"
- "!^__hash__"
- "!^__call__"
- "!^__eq__"