diff --git a/src/dishka/integrations/aiogram.py b/src/dishka/integrations/aiogram.py index 5d5f623e..aadf53a7 100644 --- a/src/dishka/integrations/aiogram.py +++ b/src/dishka/integrations/aiogram.py @@ -7,7 +7,7 @@ ] from collections.abc import Awaitable, Callable, Container -from inspect import Parameter +from inspect import Parameter, signature from typing import Any, Final, ParamSpec, TypeVar, cast from aiogram import BaseMiddleware, Router @@ -23,11 +23,14 @@ def inject(func: Callable[P, T]) -> Callable[P, T]: - additional_params = [Parameter( - name=CONTAINER_NAME, - annotation=Container, - kind=Parameter.KEYWORD_ONLY, - )] + if CONTAINER_NAME in signature(func).parameters: + additional_params = [] + else: + additional_params = [Parameter( + name=CONTAINER_NAME, + annotation=Container, + kind=Parameter.KEYWORD_ONLY, + )] return wrap_injection( func=func, diff --git a/tests/integrations/aiogram/test_aiogram.py b/tests/integrations/aiogram/test_aiogram.py index b256f3ea..2f7aa03f 100644 --- a/tests/integrations/aiogram/test_aiogram.py +++ b/tests/integrations/aiogram/test_aiogram.py @@ -6,7 +6,7 @@ from aiogram import Dispatcher from aiogram.types import Chat, Message, Update, User -from dishka import make_async_container +from dishka import AsyncContainer, make_async_container from dishka.integrations.aiogram import FromDishka, inject, setup_dishka from ..common import ( APP_DEP_VALUE, @@ -107,3 +107,16 @@ async def test_request_dependency2(bot, app_provider: AppProvider): await send_message(bot, dp) app_provider.mock.assert_called_with(REQUEST_DEP_VALUE) app_provider.request_released.assert_called_once() + + +async def handle_get_async_container( + _: Message, + dishka_container: AsyncContainer, +) -> None: + assert isinstance(dishka_container, AsyncContainer) + + +@pytest.mark.asyncio +async def test_get_async_container(bot, app_provider: AppProvider): + async with dishka_app(handle_get_async_container, app_provider) as dp: + await send_message(bot, dp)