【发布时间】:2021-01-05 17:49:13
【问题描述】:
我正在使用 injector 模块,它体现了用于 DI 框架的大部分 Guice API。
我试图通过 @Named 绑定注释完成 Guice 所做的事情。也就是说,使用injector.Module覆盖configure方法,使用Binder绑定多个相同类型但名称不同的实例:
import pathlib
import injector
ConfigFile = pathlib.WindowsPath
UserFile = pathlib.WindowsPath
cfg_file = pathlib.Path.home() / 'settings.cfg'
usr_file = pathlib.Path.home() / 'user.inf'
class AppModule(injector.Module):
def configure(self, binder):
binder.bind(ConfigFile, to=cfg_file) # Guice uses annotatedWith here
binder.bind(UserFile, to=usr_file) # Guice uses annotatedWith here
class App:
@injector.inject
def __init__(self, cfg: ConfigFile, usr: UserFile):
self.config = cfg
self.user = usr
app = injector.Injector(AppModule).get(App)
print(app.config, app.user) # prints the contents of `usr_file` for both
我认为Binder.multibind 我有一些生存能力,但我的尝试没有成功。我可以设计的唯一解决方案是必须将pathlib.Path 子类化,并且这些子类显式绑定到它们的实例(可以在injector.Module 中使用@provider 与@singleton 一起管理)。
是否有另一种无法解决子类的方法来完成此任务?
【问题讨论】:
标签: python dependency-injection guice