Apply Provider pattern to SessionFactory
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 154978f..298367c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
@@ -33,9 +33,8 @@
 import com.googlesource.gerrit.plugins.rabbitmq.message.MessagePublisher;
 import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
 import com.googlesource.gerrit.plugins.rabbitmq.message.PublisherFactory;
-import com.googlesource.gerrit.plugins.rabbitmq.session.Session;
 import com.googlesource.gerrit.plugins.rabbitmq.session.SessionFactory;
-import com.googlesource.gerrit.plugins.rabbitmq.session.impl.AMQPSession;
+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;
@@ -48,6 +47,8 @@
 
   @Override
   protected void configure() {
+    bind(SessionFactory.class).toProvider(SessionFactoryProvider.class);
+
     Multibinder<Section> sectionBinder = Multibinder.newSetBinder(binder(), Section.class);
     sectionBinder.addBinding().to(AMQP.class);
     sectionBinder.addBinding().to(Exchange.class);
@@ -56,7 +57,6 @@
     sectionBinder.addBinding().to(Monitor.class);
 
     install(new FactoryModuleBuilder().implement(Solver.class, SolverImpl.class).build(SolverFactory.class));
-    install(new FactoryModuleBuilder().implement(Session.class, AMQPSession.class).build(SessionFactory.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/message/MessagePublisher.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
index 344d4f7..5413940 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/MessagePublisher.java
@@ -24,6 +24,7 @@
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Monitor;
 import com.googlesource.gerrit.plugins.rabbitmq.session.Session;
 import com.googlesource.gerrit.plugins.rabbitmq.session.SessionFactory;
+import com.googlesource.gerrit.plugins.rabbitmq.session.SessionFactoryProvider;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -46,9 +47,9 @@
   @Inject
   public MessagePublisher(
       @Assisted Properties properties,
-      SessionFactory sessionFactory,
+      SessionFactoryProvider sessionFactoryProvider,
       Gson gson) {
-    this.session = sessionFactory.create(properties);
+    this.session = sessionFactoryProvider.get().create(properties);
     this.properties = properties;
     this.gson = gson;
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/SessionFactory.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/SessionFactory.java
index 12683af..16bd310 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/SessionFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/SessionFactory.java
@@ -14,7 +14,10 @@
 package com.googlesource.gerrit.plugins.rabbitmq.session;
 
 import com.googlesource.gerrit.plugins.rabbitmq.config.Properties;
+import com.googlesource.gerrit.plugins.rabbitmq.session.type.AMQPSession;
 
-public interface SessionFactory {
-  Session create(Properties properties);
+public class SessionFactory {
+  public Session create(Properties properties) {
+    return new AMQPSession(properties);
+  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/SessionFactoryProvider.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/SessionFactoryProvider.java
new file mode 100644
index 0000000..07a6552
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/SessionFactoryProvider.java
@@ -0,0 +1,24 @@
+// 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.session;
+
+import com.google.inject.Provider;
+
+public class SessionFactoryProvider implements Provider<SessionFactory> {
+
+  @Override
+  public SessionFactory get() {
+    return new SessionFactory();
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/impl/AMQPSession.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
similarity index 98%
rename from src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/impl/AMQPSession.java
rename to src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
index ca42547..a3eeeed 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/impl/AMQPSession.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/session/type/AMQPSession.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.googlesource.gerrit.plugins.rabbitmq.session.impl;
+package com.googlesource.gerrit.plugins.rabbitmq.session.type;
 
 import com.google.inject.Inject;
 import com.google.inject.assistedinject.Assisted;
@@ -94,7 +94,7 @@
   private final ShutdownListener channelListener = new ShutdownListenerImpl(Channel.class);
 
   @Inject
-  public AMQPSession(@Assisted Properties properties) {
+  public AMQPSession(Properties properties) {
     this.properties = properties;
   }