update user manager to support instantiation if IUserService with IRuntimeManager as a parameter
diff --git a/src/main/java/com/gitblit/IUserService.java b/src/main/java/com/gitblit/IUserService.java
index 6f3c542..468f968 100644
--- a/src/main/java/com/gitblit/IUserService.java
+++ b/src/main/java/com/gitblit/IUserService.java
@@ -26,6 +26,9 @@
  * Implementations of IUserService control all aspects of UserModel objects and

  * user authentication.

  *

+ * Plugins implementing this interface (which are instantiated during {@link com.gitblit.manager.UserManager#start()}) can provide

+ * a default constructor or might also use {@link IRuntimeManager} as a constructor argument which will be passed automatically then. 

+ *

  * @author James Moger

  *

  */

diff --git a/src/main/java/com/gitblit/manager/UserManager.java b/src/main/java/com/gitblit/manager/UserManager.java
index e88ac93..ba0cb35 100644
--- a/src/main/java/com/gitblit/manager/UserManager.java
+++ b/src/main/java/com/gitblit/manager/UserManager.java
@@ -17,6 +17,8 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -119,8 +121,15 @@
 					// typical file path configuration
 					File realmFile = runtimeManager.getFileOrFolder(Keys.realm.userService, "${baseFolder}/users.conf");
 					service = createUserService(realmFile);
-				} catch (InstantiationException | IllegalAccessException  e) {
-					logger.error("failed to instantiate user service {}: {}", realm, e.getMessage());
+				} catch (InstantiationException | IllegalAccessException e1) {
+                                        logger.error("failed to instantiate user service {}: {}. Trying once again with IRuntimeManager constructor", realm, e1.getMessage());
+				        //try once again with file constructor. this adds support for subclasses of ConfigUserService
+                                        try {
+                                            Constructor<?> constructor = Class.forName(realm).getConstructor(IRuntimeManager.class);
+                                            service = (IUserService) constructor.newInstance(runtimeManager);
+                                        } catch (NoSuchMethodException | SecurityException | ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e2) {
+                                            logger.error("failed to instantiate user service {}: {}", realm, e2.getMessage());
+                                        }
 				}
 			}
 			setUserService(service);