Inject, Factory and Injects¶
Warning
The current page still doesn't have a translation for this language.
But you can help translating it: Contributing.
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.
Note: Intentionally extends Pydantic's @final FieldInfo to enable dependency injection. The DI system relies on isinstance(param, FieldInfo) to detect injection points. Composition would break this detection, so we extend FieldInfo despite its @final marker.
Example
@get(dependencies={"value": Inject(lambda: 13)})
def myview(value: Injects()):
return {"value": value}
Source code in ravyn/injector.py
141 142 143 144 145 146 147 148 149 150 151 152 153 | |
- "!^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__"