Apply multibinding to Solver
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
index e6a943d..76f7815 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
@@ -26,7 +26,6 @@
 import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
 import com.googlesource.gerrit.plugins.rabbitmq.message.PublisherFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.solver.Solver;
-import com.googlesource.gerrit.plugins.rabbitmq.solver.SolverFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.ChangeWorker;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.ChangeWorkerFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.DefaultChangeWorker;
@@ -41,6 +40,7 @@
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 @Singleton
 public class Manager implements LifecycleListener {
@@ -56,7 +56,7 @@
   private final ChangeWorker userChangeWorker;
   private final PublisherFactory publisherFactory;
   private final PropertiesFactory propFactory;
-  private final SolverFactory solverFactory;
+  private final Set<Solver> solvers;
   private final List<Publisher> publisherList = new ArrayList<>();
 
   @Inject
@@ -67,20 +67,21 @@
       final ChangeWorkerFactory changeWorkerFactory,
       final PublisherFactory publisherFactory,
       final PropertiesFactory propFactory,
-      final SolverFactory solverFactory) {
+      final Set<Solver> solvers) {
     this.pluginName = pluginName;
     this.pluginDataDir = pluginData.toPath();
     this.defaultChangeWorker = defaultChangeWorker;
     this.userChangeWorker = changeWorkerFactory.create();
     this.publisherFactory = publisherFactory;
     this.propFactory = propFactory;
-    this.solverFactory = solverFactory;
+    this.solvers = solvers;
   }
 
   @Override
   public void start() {
-    Solver solver = solverFactory.create();
-    solver.solve();
+    for (Solver solver : solvers) {
+      solver.solve();
+    }
 
     List<Properties> propList = load();
     for (Properties properties : propList) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
index e1f2b1e..4d67525 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
@@ -35,9 +35,8 @@
 import com.googlesource.gerrit.plugins.rabbitmq.message.PublisherFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.session.SessionFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.session.SessionFactoryProvider;
-import com.googlesource.gerrit.plugins.rabbitmq.solver.SolverImpl;
 import com.googlesource.gerrit.plugins.rabbitmq.solver.Solver;
-import com.googlesource.gerrit.plugins.rabbitmq.solver.SolverFactory;
+import com.googlesource.gerrit.plugins.rabbitmq.solver.version.V1;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.ChangeWorker;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.ChangeWorkerFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.DefaultChangeWorker;
@@ -56,7 +55,9 @@
     sectionBinder.addBinding().to(Message.class);
     sectionBinder.addBinding().to(Monitor.class);
 
-    install(new FactoryModuleBuilder().implement(Solver.class, SolverImpl.class).build(SolverFactory.class));
+    Multibinder<Solver> solverBinder = Multibinder.newSetBinder(binder(), Solver.class);
+    solverBinder.addBinding().to(V1.class);
+
     install(new FactoryModuleBuilder().implement(Publisher.class, MessagePublisher.class).build(PublisherFactory.class));
     install(new FactoryModuleBuilder().implement(Properties.class, PluginProperties.class).build(PropertiesFactory.class));
     install(new FactoryModuleBuilder().implement(ChangeWorker.class, UserChangeWorker.class).build(ChangeWorkerFactory.class));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/SolverFactory.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/SolverFactory.java
deleted file mode 100644
index e34f98d..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/SolverFactory.java
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2015 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-package com.googlesource.gerrit.plugins.rabbitmq.solver;
-
-public interface SolverFactory {
-  public Solver create();
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/SolverImpl.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/SolverImpl.java
deleted file mode 100644
index b7de500..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/SolverImpl.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (C) 2015 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.googlesource.gerrit.plugins.rabbitmq.solver;
-
-import com.google.gerrit.extensions.annotations.PluginData;
-import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.server.config.SitePaths;
-import com.google.inject.Inject;
-
-import com.googlesource.gerrit.plugins.rabbitmq.solver.version.V1;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-
-public class SolverImpl implements Solver {
-
-  private static final Logger LOGGER = LoggerFactory.getLogger(SolverImpl.class);
-
-  private final Solver solver;
-
-  @Inject
-  public SolverImpl(
-      @PluginName final String pluginName,
-      @PluginData final File pluginData,
-      final SitePaths sites
-      ) {
-    this.solver = new V1(pluginName, pluginData, sites);
-  }
-
-  public void solve() {
-    solver.solve();
-  }
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/version/V1.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/version/V1.java
index c0f0c89..1504564 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/version/V1.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/version/V1.java
@@ -15,6 +15,8 @@
 import static com.googlesource.gerrit.plugins.rabbitmq.Manager.FILE_EXT;
 import static com.googlesource.gerrit.plugins.rabbitmq.Manager.SITE_DIR;
 
+import com.google.gerrit.extensions.annotations.PluginData;
+import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.server.config.SitePaths;
 import com.google.inject.Inject;
 
@@ -38,8 +40,8 @@
 
   @Inject
   public V1(
-      final String pluginName,
-      final File pluginData,
+      @PluginName final String pluginName,
+      @PluginData final File pluginData,
       final SitePaths sites
       ) {
     this.pluginName = pluginName;