如果我创建一个提供者并将其绑定到一个类,就像这样
bind(MyClass.class).toProvider(MyClassProvider.class)
然后提供者
@Inject
public MyClassProvider(Provider<MyClass> provider)
我想将默认的Guice提供程序注入到我的提供程序中,以便可以在自定义提供程序中轻松创建新实例。怎么做?
您需要在其中一个上使用绑定注释。如果你不介意MyClass的用户被注释,那么这很容易。
public class AccountTest {
@Test
public void test() {
Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(MyClass.class).annotatedWith(Names.named("MYPROVIDER")).toProvider(MyClassProvider.class);
}
});
MyClassUser user = injector.getInstance(MyClassUser.class);
assertTrue(user.get().myProvider); // Shows if was created via my provider or the Guice provider.
}
}
class MyClassUser {
Provider<MyClass> provider;
@com.google.inject.Inject
public MyClassUser(@Named("MYPROVIDER") Provider<MyClass> provider) {
this.provider= provider;
}
MyClass get() {
return provider.get();
}
}
class MyClass {
boolean myProvider = false;
}
class MyClassProvider implements Provider<MyClass> {
Provider<MyClass> provider;
@com.google.inject.Inject
public MyClassProvider(Provider<MyClass> provider) {
this.provider= provider;
}
@Override
public MyClass get() {
MyClass c = provider.get();
c.myProvider = true;
return c;
}
public String toString() {
return "Our provider";
}
}
如果你不想让MyClass的用户使用命名提供者,我唯一能让它工作的方法就是扩展MyClass,让MyClassProvider需要一个“MyClass2”提供者。作为一种解决方案,它闻起来很臭,但很有效(而不是用一个糟糕的答案来污染这个答案,你可以找到关于这个要点的代码)。
你可以用私有模块或子模块来实现这一点(因为这是机器人腿问题的变体),但我一直无法解决如何实现这一点。
问题内容: 我做错了什么? 根据文件,我应该能够注入到......但我得到一个错误- “未知供应商” http://jsfiddle.net/g26n3/ 实际上,我在这里有三个问题… 1)如何注入模块的配置。 2)如何向模块配置注入相同的提供程序()。 3)如果我将相同的提供程序注入到两个模块的配置中,它将是相同的提供程序实例,还是两个不同的实例? 谢谢! 问题答案: 您需要添加“ Provid
我正在尝试创建一个自定义的KeyClope提供程序,它将为登录逻辑添加一些内容。我已经读过如何为KeyClope创建提供者(或插件),我正在与之合作的项目中已经有一个提供者(或插件),但我对它们知之甚少。 我需要为用户身份验证/授权添加自定义逻辑:我希望能够检查内部数据库中的一些字段来验证人员帐户。但是我没有找到任何关于类似情况的指南或好文章。有人能给我提供一些关于从什么开始的链接吗?为了实现这样
这是一个奇怪的用例,我需要一些帮助来弄清楚如何相互结合使用辅助/提供者/FactoryModuleBuilders。忽略的缺失。这只是一个例子。 属于我无法更改的库的一组特征具有以下模式。它使用蛋糕图案。 由于这些特征不能被直接注入,我创建了一个允许它们被注入的包装器 在我的代码中,我有一个依赖于服务的控制器,而服务又依赖于库。根据控制器的需要,服务应能够使用“BB”或“CC”。组件如下所示 我将
我将为我的网站创建自定义用户提供程序,对于用户来说,没有“用户名”和“密码”这样的概念(实际上有类似于密码的东西,但它的名称不同)。在文档中,用户实体必须实现来自安全包的UserInterface,该安全包具有诸如getUsername、getPassword之类的方法。我能用我自己的领域吗?或者我应该使用名称冲突(例如,getUsername将返回我的唯一字段)来实现我的行为吗?
我的配置是: < li>Grails框架3.0.11 < Li > " org . grails . plugins:spring-security-core:3 . 0 . 3 " < Li > " org . grails . plugins:spring-security-oauth 2-provider:3 . 0 . 0-RC1 " 我已经指定了我的自定义用户详细信息服务(实现Grail
问题内容: Sun的PKCS11 JCE安全提供程序缺少我们需要的某些功能。 因此,我使用原始资源编写了它的增强版本。 不幸的是,JCE基础结构拒绝新的提供者 “ JCE无法验证提供者”, 因为它没有正确签名。 抛出。 (呼叫) 关于如何签署新提供商以使其与JCE一起工作的任何建议? 问题答案: 该过程在文档“如何实现 提供者”中进行了描述。 它涉及到电子邮件 太阳向Oracle提供一些信息(包括