如何使用 flask-injector 将接口作为参数注入函数
How to Inject Interface as a parameter to function using flask-injector
我正在使用 flask-injector 和 connexion 开发 API 应用程序。我有以下设置 -
界面 -
class RestaurantsProvider(Module):
@inject
def __init__(self, items: list=[]):
self._items = items
@provider
def get(self, number_of_items: int=5) -> list:
if not self._items:
return []
if number_of_items > len(self._items):
number_of_items = len(self._items)
return self._items
绑定 -
from connexion.resolver import RestyResolver
import connexion
from injector import Binder, CallableProvider
from flask_injector import FlaskInjector
from services.provider import RestaurantsProvider
def configure(binder: Binder) -> Binder:
binder.bind(
interface=RestaurantsProvider.RestaurantsProvider,
to= RestaurantsProvider.RestaurantsProvider([{"Name":"Fgh"}])
);
if __name__ == '__main__':
app = connexion.App(__name__, port=2508,
specification_dir='swagger/')
app.add_api('restaurants.yaml', resolver=RestyResolver('api'))
# app.run(ssl_context=('cert.pem','key.pem'))
FlaskInjector(app=app.app, modules=[configure])
app.run()
现在我想在这样的函数中注入这个接口
@inject(data_provider = RestaurantsProvider)
def search(data_provider) -> list:
return data_provider.get()
但是较新版本的注入器 (0.13.0) 不允许参数化注入,我仔细阅读了文档,但无法弄清楚如何注入此函数的接口。
注意 - 此函数在 api.restaurants.py 中并且按预期被调用。
你能不能只使用@inject 然后:
search(data_provider: RestaurantsProvider)
我正在使用 flask-injector 和 connexion 开发 API 应用程序。我有以下设置 -
界面 -
class RestaurantsProvider(Module):
@inject
def __init__(self, items: list=[]):
self._items = items
@provider
def get(self, number_of_items: int=5) -> list:
if not self._items:
return []
if number_of_items > len(self._items):
number_of_items = len(self._items)
return self._items
绑定 -
from connexion.resolver import RestyResolver
import connexion
from injector import Binder, CallableProvider
from flask_injector import FlaskInjector
from services.provider import RestaurantsProvider
def configure(binder: Binder) -> Binder:
binder.bind(
interface=RestaurantsProvider.RestaurantsProvider,
to= RestaurantsProvider.RestaurantsProvider([{"Name":"Fgh"}])
);
if __name__ == '__main__':
app = connexion.App(__name__, port=2508,
specification_dir='swagger/')
app.add_api('restaurants.yaml', resolver=RestyResolver('api'))
# app.run(ssl_context=('cert.pem','key.pem'))
FlaskInjector(app=app.app, modules=[configure])
app.run()
现在我想在这样的函数中注入这个接口
@inject(data_provider = RestaurantsProvider)
def search(data_provider) -> list:
return data_provider.get()
但是较新版本的注入器 (0.13.0) 不允许参数化注入,我仔细阅读了文档,但无法弄清楚如何注入此函数的接口。
注意 - 此函数在 api.restaurants.py 中并且按预期被调用。
你能不能只使用@inject 然后:
search(data_provider: RestaurantsProvider)