-
- Notifications
You must be signed in to change notification settings - Fork 338
Closed
Description
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