Skip to content

Injection return provide object not actual dependency object #328

Closed
@ijalalfrz

Description

@ijalalfrz

i have a class to be injected
src/runner_rating/api/rating/controller.py

class Rating():
    @inject
    def __init__(
                self,
                repo: RatingRepository = Provide[Container.repo.rating]):
        self.repo = repo

    def get_by_id(self, id):
        data = self.repo.get_by_id(id)
        if not data:
            raise HTTPNotFoundException(self.repo.index_name)

this is my container looks like:
src/container.py

class ESContainer(containers.DeclarativeContainer):
    config = providers.Configuration()
    client = providers.Singleton(
        elasticsearch_client.ElasticsearchClient,
        config=config.elasticsearch
    )

class RepositoryContainer(containers.DeclarativeContainer):

    config = providers.Configuration()
    db = providers.DependenciesContainer()

    rating = providers.Singleton(
        RatingRepository,
        db=db.client
    )

class Container(containers.DeclarativeContainer):

    config = providers.Configuration()
    es = providers.Container(
        ESContainer,
        config=config
    )

    repo = providers.Container(
        RepositoryContainer,
        config=config,
        db=es
    )

this is when Container were called:
src/application.py

from src import runner_rating
def main():
    # register dependency
    di_container = Container()
    di_container.config.from_dict(config.get_config())
    di_container.wire(modules=[runner_rating])


when i try Rating.get_by_id it shows error that:

 data = self.repo.get_by_id(id)
AttributeError: 'Provide' object has no attribute 'get_by_id'

Why? i'am using v2.5.1

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions