On this page

Constructor dependency injection๏ƒ

Beginner โ†’ Intermediate. Annotations, explicit targets, collections.

Annotate a constructor parameter. Melder builds the graph.

What an annotation selects depends on what it is. A class selects the spells of that type โ€” a class bound bare, or an existing object of that class โ€” and nothing else: a category that happens to share the class's name does not turn its members into providers. A Protocol selects the spells bound under it as their contract. A TYPE_CHECKING-only import, which leaves a string at runtime, resolves by name to a type or a contract, never to a string category. list[...] gathers the group the annotation's kind names: every spell of the class, every implementer of the Protocol, or โ€” for a string โ€” every member of the category or type of that name.

class ReportService:
    def __init__(self, database: Database) -> None:   # โ† injected
        self.database = database

book.bind(spell=Database, existence="unique")
book.bind(spell=ReportService, existence="unique")
conduit = book.conjure()

report = conduit.meld("ReportService")

Runnable examples๏ƒ

All beginner examples ยท Level contents ยท Full contents

Canonical page source