我正在编写一个处理多个系统的应用程序。用户可以选择他想使用的系统,我将该系统ID存储在会话(客户端会话)中
现在我有了服务类,比如说CustomerService。
class CustomerService(val systemID: String) {
// Implementation
}
我想使用 Guice 将客户实例注入控制器。但是我想使用存储在会话中的系统ID实例化客户服务。
如何访问<code>请求。Guice模块中的会话?
编辑:
简化了我上面的代码。我的实际代码使用接口。我如何使用辅助注射?
trait CustomerService(val systemID: String) {
// Definition
}
object CustomerService{
trait Factory {
def apply(systemID: String) : CustomerService
}
}
class DefaultCustomerService @Inject() (@Assisted systemID: String)
extends CustomerService {
// Definition
}
class CustomerController @Inject()(
val messagesApi: MessagesApi,
csFactory: CustomerService.Factory)
{
}
这给了我:客户服务是一个接口,而不是一个具体类。无法创建AssistedInject工厂。
并且我不想将工厂放在Default怎们服务
下,并在控制器中使用Default怎们服务。工厂
。这是因为对于单元测试,我将使用Test怎们服务
存根,并希望依赖注入将Test怎们服务
注入到控制器中,而不是默认客户服务
。
您不应该这样做。如果您需要注入需要runtime值的东西的实例,您可以使用guice的AssistedInject。
以下是你在玩耍时如何使用它:
1.使用运行时值作为参数创建服务的工厂:
object CustomerService {
trait Factory {
def apply(val systemID: String): CustomerService
}
}
2.用辅助参数实现您的服务
class CustomerService @Inject() (@Assisted systemId: String) { .. }
3.在guice模块中绑定工厂:
install(new FactoryModuleBuilder()
.implement(classOf[CustomerService], classOf[CustomerServiceImpl])
.build(classOf[CustomerService.Factory]))
4.最后注入您需要客户服务的工厂:
class MyController @Inject() (csFactory: CustomerService.Factory) { .. }
以下是辅助注射的另一个示例:https://www.playframework.com/documentation/2.5.x/ScalaTestingWebServiceClients
问题内容: 我想直接在html中使用几个常量(在控制器中几次)。 例如,这是主要的应用程序模块: 因此,很清楚如何使用控制器中的常量。 但是我该怎么做: 关键是将所有路线都放在一个地方。所以,我可以这样做,还是我选择了错误的方式? 问题答案: 恕我直言,更好的方法是使用$ rootScope。 在html中,每个范围都继承自$ rootScope,因此,如果当前作用域中不存在变量,则使用$ roo
问题内容: 我希望能够从导入的模块中动态检索当前执行模块或类名称。这是一些代码: foo.py: bar.py: 这显然不起作用,因为包含该功能的模块的名称是无效的。我希望在模块内部访问的是正在使用的当前执行模块的名称。因此,在上述情况下,将是这样,但是如果导入了其他模块,我想动态地访问该模块的名称。 编辑: 该模块看起来很有希望,但它并不是我一直在寻找的东西。我希望找到的是我可以访问的某种全局或
问题内容: 从v2.0开始,Elasticsearch默认情况下仅在localhost上侦听,但我想在localhost之外发出请求。 例如,允许这样的请求: 但这不是: (从服务器外部,例如:同一LAN中的本地计算机)。 谢谢你的帮助。 问题答案: 在放
我正在编写一个Groovy脚本来使用SOAP Web服务。首先,我在SOAP中导入了我的WSDL并创建了一个项目。 那么所有的SOAP请求都会自动生成。 现在我尝试编写一个Groovy来使用生成的SOAP请求调用SOAP服务。 现在这是我的时髦脚本 我想访问在SOAPUI-CreateNote中生成的相同SOAP请求。我如何访问它? 我的实际需求是访问Groovy脚本中的所有SOAP请求——这样我
问题内容: 在执行ModelForm时,我想根据当前用户是否为超级用户执行不同类型的验证检查。如何访问当前的请求用户? 问题答案: 您可以将用户对象作为额外的参数传递给表单构造函数。 例如 构造函数将如下所示: 然后根据需要在clean_XX表单中使用user
问题内容: 我创建了一个本地EJB,我想从同一VM中的Web模块访问它。我的代码如下所示: 这很好。但是,有人告诉我,如果我正在使用本地bean,则不需要进行查找,我只需要进行如下注入: 但是,如果我尝试这样做,则会在this.userBean上得到一个空异常。建议我的人与JBoss合作,而我正在使用glassfish。难道我做错了什么? 问题答案: @EJB注释仅适用于应用程序服务器控制的类,例