diff --git a/pom.xml b/pom.xml
index 372b4f04c3..c27a3b3f55 100644
--- a/pom.xml
+++ b/pom.xml
@@ -546,6 +546,11 @@ limitations under the License.
guice-servlet
2.0
+
+ com.google.code.guice
+ guice-assistedinject
+ 2.0
+
aopalliance
diff --git a/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java b/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java
index 098d89bcac..cf9d685f70 100644
--- a/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java
+++ b/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java
@@ -30,7 +30,6 @@ import com.google.gerrit.client.rpc.InvalidSshKeyException;
import com.google.gerrit.client.rpc.NoSuchEntityException;
import com.google.gerrit.server.mail.EmailException;
import com.google.gerrit.server.mail.RegisterNewEmailSender;
-import com.google.gerrit.server.mail.EmailSender;
import com.google.gerrit.server.ssh.SshUtil;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwtjsonrpc.client.VoidResult;
@@ -65,15 +64,15 @@ class AccountSecurityImpl extends BaseServiceImplementation implements
private final Logger log = LoggerFactory.getLogger(getClass());
private final GerritServer server;
private final ContactStore contactStore;
- private final EmailSender emailSender;
+ private final RegisterNewEmailSender.Factory registerNewEmailFactory;
@Inject
AccountSecurityImpl(final SchemaFactory sf, final GerritServer gs,
- final ContactStore cs, final EmailSender es) {
+ final ContactStore cs, final RegisterNewEmailSender.Factory esf) {
super(sf);
server = gs;
contactStore = cs;
- emailSender = es;
+ registerNewEmailFactory = esf;
}
public void mySshKeys(final AsyncCallback> callback) {
@@ -289,7 +288,7 @@ class AccountSecurityImpl extends BaseServiceImplementation implements
GerritJsonServlet.getCurrentCall().getHttpServletRequest();
try {
final RegisterNewEmailSender sender;
- sender = new RegisterNewEmailSender(server, emailSender, address, req);
+ sender = registerNewEmailFactory.create(address);
sender.send();
cb.onSuccess(VoidResult.INSTANCE);
} catch (EmailException e) {
diff --git a/src/main/java/com/google/gerrit/server/GerritServerModule.java b/src/main/java/com/google/gerrit/server/GerritServerModule.java
index d851bcea16..e737a71b78 100644
--- a/src/main/java/com/google/gerrit/server/GerritServerModule.java
+++ b/src/main/java/com/google/gerrit/server/GerritServerModule.java
@@ -29,12 +29,14 @@ import com.google.gerrit.server.config.GerritServerConfigProvider;
import com.google.gerrit.server.config.SitePath;
import com.google.gerrit.server.config.SitePathProvider;
import com.google.gerrit.server.mail.EmailSender;
+import com.google.gerrit.server.mail.RegisterNewEmailSender;
import com.google.gerrit.server.mail.SmtpEmailSender;
import com.google.gwtorm.client.SchemaFactory;
import com.google.gwtorm.jdbc.Database;
import com.google.inject.AbstractModule;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
+import com.google.inject.assistedinject.FactoryProvider;
import com.google.inject.name.Names;
import org.spearce.jgit.lib.Config;
@@ -72,5 +74,9 @@ public class GerritServerModule extends AbstractModule {
bind(GerritConfig.class).toProvider(GerritConfigProvider.class).in(
SINGLETON);
bind(PatchSetInfoFactory.class);
+
+ bind(RegisterNewEmailSender.Factory.class).toProvider(
+ FactoryProvider.newFactory(RegisterNewEmailSender.Factory.class,
+ RegisterNewEmailSender.class));
}
}
diff --git a/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java b/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java
index 9c39978dea..d6c8e87362 100644
--- a/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java
+++ b/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java
@@ -16,6 +16,8 @@ package com.google.gerrit.server.mail;
import com.google.gerrit.server.GerritServer;
import com.google.gwtjsonrpc.server.XsrfException;
+import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
import org.spearce.jgit.util.Base64;
@@ -24,11 +26,17 @@ import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
public class RegisterNewEmailSender extends OutgoingEmail {
+
+ public static interface Factory {
+ public RegisterNewEmailSender create(String address);
+ }
+
private final HttpServletRequest req;
private final String addr;
+ @Inject
public RegisterNewEmailSender(final GerritServer gs, final EmailSender sf,
- final String address, final HttpServletRequest request) {
+ @Assisted final String address, final HttpServletRequest request) {
super(gs, sf, null, "registernewemail");
addr = address;
req = request;