- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个 ThirPartyModule
第三方模块,它绑定(bind)了许多组件,然后我可以在我的应用程序中使用它们:
Injector guice = Guice.createInjector(new MyAppModule(), new ThirPartyModule());
如果我想修改该模块中某些绑定(bind)使用的实现类,最好的方法是什么?
例如,假设 ThirPartyModule
执行该绑定(bind):
bind(WidgetInterface.class).to(DefaultWidgeImpl.class).in(Scopes.SINGLETON);
并且我希望能够将 DefaultWidgeImpl
类更改为 MyWidgetImpl
类。我知道我可以使用一个覆盖模块,然后简单地重新绑定(bind) WidgetInterface
键。但是,如果 ThirPartyModule
使用相同的 Widget 实现绑定(bind)很多事物会怎样呢?我可能不想重新绑定(bind)它们!
因此,我试图找到最好的解决方案,以便能够指定要使用的实现类,而无需重新绑定(bind)依赖于它的所有组件。
我猜 ThirPartyModule
可以首先为实现类创建一个 getter 方法:
bind(WidgetInterface.class).to(getWidgetImpClass()).in(Scopes.SINGLETON);
protected Class<? extends WidgetInterface> getWidgetImpClass() {
return DefaultWidgeImpl.class;
}
然后应用程序可以重写 getWidgetImpClass()
方法:
Injector guice = Guice.createInjector(new MyAppModule(), new ThirPartyModule() {
@Override
protected Class<? extends WidgetInterface> getWidgetImpClass() {
return MyWidgetImpl.class;
}
});
我还考虑将实现类传递给模块的构造函数:
Injector guice = Guice.createInjector(new MyAppModule(), new ThirPartyModule(MyWidgetImpl.class));
我想知道是否有公认的模式来定制此类第三方模块?假设我可以要求以特定方式编写模块(如果这有助于自定义模块)。
最佳答案
我会这样做:
public class ThirdPartyModule extends AbstractModule {
@Override
protected void configure() {
// CoolWidget --
// \
// > WidgetInterface -> DefaultWidgetImpl
// /
// AwesomeWidget
OptionalBinder.newOptionalBinder(binder(), WidgetInterface.class)
.setDefault()
.to(DefaultWidgetImpl.class);
bind(CoolWidget.class).to(WidgetInterface.class);
bind(AwesomeWidget.class).to(WidgetInterface.class);
// etc.
}
}
public class MyAppModule extends AbstractModule {
@Override
protected void configure() {
OptionalBinder.newOptionalBinder(binder(), WidgetInterface.class)
.setBinding()
.to(CustomWidgetImpl.class);
}
}
通过使所有绑定(bind)间接通过 WidgetInterface
键,您只需覆盖该一个绑定(bind)即可。
关于java - 吉斯 : How to customize the bindings of a third-party Module?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40996738/
我在 Guice 字段注入(inject)方面遇到问题。考虑遵循类的层次结构。 abstract class Base{ @Inject protected MyService myS
我有一个实用方法: public static void MyUtility(ClassWhoDoesImportantThink instance,
我有一个单例: public class MySingleton{ public static getInstance(){//typical singleton getInstance
我有一个使用 GIN 在入口点注入(inject)依赖项的 web 应用程序。 private InjectorService injector = GWT.create(InjectorServic
尝试开始使用 Guice,并努力了解我的用例如何适合。 我有一个命令行应用程序,它需要几个可选参数。 例如,假设我有显示客户订单的工具 order-tool display --customerId
使用 Guice 3.0,我尝试注入(inject)一个可以抛出特定检查异常的 Provider。所以我使用Throwing Providers extension . 我为提供者创建了一个接口(in
假设我有一个 ThirPartyModule 第三方模块,它绑定(bind)了许多组件,然后我可以在我的应用程序中使用它们: Injector guice = Guice.createInjector
我正在尝试实现一个简单的 Guice+Shiro Web 应用程序。 web.xml guiceFilter com.google.inject.serv
我正在使用 Guice 开发一个小型 Web 框架。我有一个 Router 对象,一旦初始化,就会公开一个 getControllerClasses() 方法。我必须遍历所有这些动态返回的类以使用 G
我知道这可能不是最纯粹形式的依赖注入(inject),但假设我必须使用: @Inject Injector injector; 使用这个注入(inject)器,是否可以获得所有给定的绑定(bind)实
我是一名优秀的程序员,十分优秀!