Skip to content

Using of configuration provider with some singleton providers #313

@iskorini

Description

@iskorini

Hi, I've a problem with wiring function and I don't understand where I'm wrong.
My classes are that:

ConfigurationContainer.py

from dependency_injector import containers, providers class ConfigContainer(containers.DeclarativeContainer): config = providers.Configuration()

DependencyContainer.py

from dependency_injector import containers, providers from src.DialogflowInteraction import DialogflowInteraction from src.QA.ContextRetriever.VeryBasicContextRetriever import \ VeryBasicContextRetriever from src.QA.QA import QA class BotDependencyFactory(containers.DeclarativeContainer): verybasiccontextretriever = providers.Singleton(VeryBasicContextRetriever) q_a = providers.Singleton(QA) dialogflowinteraction = providers.Singleton(DialogflowInteraction)

Bot.py

import logging from uuid import uuid1 import sys from dependency_injector.wiring import Provide from src.ConfigurationContainer import ConfigContainer from src.DependencyContainer import BotDependencyFactory class Bot(): def __init__( self, threshold=Provide[ConfigContainer.config.general.threshold.as_float()], q_a = Provide[BotDependencyFactory.q_a], context_retriever = Provide[BotDependencyFactory.verybasiccontextretriever], dialogflowinteraction = Provide[BotDependencyFactory.dialogflowinteraction] ): self.threshold = threshold self.QA = q_a self.context_retriever = context_retriever self.df_bot = dialogflowinteraction

app.py

import logging import os import sys from src.ConfigurationContainer import ConfigContainer from src.DependencyContainer import BotDependencyFactory from src.bot import Bot def configure_env(): logging.basicConfig(level=logging.INFO) config = ConfigContainer() config.config.from_ini('config.ini') logging.info('configuration completed') return config if __name__ == '__main__': config = configure_env() config.wire(modules=[sys.modules[__name__]]) logging.info('Configuration container wired successfully') bot_dependency_factory = BotDependencyFactory() bot_dependency_factory.wire(modules=[sys.modules[__name__]]) bot = Bot() 

When I try to run main method returns this exception

INFO:root:configuration completed Traceback (most recent call last): File "C:\Users\Federico\anaconda3\envs\deepcleverbot\lib\site-packages\dependency_injector\wiring.py", line 111, in _resolve_provider return self._map[original] KeyError: <dependency_injector.providers.Singleton(<class 'src.QA.QA.QA'>) at 0x256758fd630> During handling of the above exception, another exception occurred: Traceback (most recent call last): File "c:/Users/Federico/Desktop/DeepCleverBot/bot/app.py", line 24, in <module> config.wire(modules=[sys.modules[__name__]]) File "src/dependency_injector/containers.pyx", line 195, in dependency_injector.containers.DynamicContainer.wire File "C:\Users\Federico\anaconda3\envs\deepcleverbot\lib\site-packages\dependency_injector\wiring.py", line 162, in wire _patch_fn(member, method_name, method, providers_map) File "C:\Users\Federico\anaconda3\envs\deepcleverbot\lib\site-packages\dependency_injector\wiring.py", line 193, in _patch_fn injections = _resolve_injections(fn, providers_map) File "C:\Users\Federico\anaconda3\envs\deepcleverbot\lib\site-packages\dependency_injector\wiring.py", line 218, in _resolve_injections provider = providers_map.resolve_provider(marker.provider) File "C:\Users\Federico\anaconda3\envs\deepcleverbot\lib\site-packages\dependency_injector\wiring.py", line 55, in resolve_provider return self._resolve_provider(provider) File "C:\Users\Federico\anaconda3\envs\deepcleverbot\lib\site-packages\dependency_injector\wiring.py", line 113, in _resolve_provider raise Exception('Unable to resolve original provider') Exception: Unable to resolve original provider 

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions