code: public static void addDependencyFactory(Class... dependencyFactoryClasses) {
          for (Class dependencyFactoryClass : dependencyFactoryClasses) {
              if (!dependencyFactoryClass.isAnnotationPresent(DependencyFactory.class)) {
                  throw new AvicennaRuntimeException(
                          dependencyFactoryClass + " should be annotated with DependencyFactory.");
              }
              if (Avicenna.dependencyFactories.contains(dependencyFactoryClass)) {
                  throw new AvicennaRuntimeException(
                          dependencyFactoryClass + " has already been added to container.");
              }
              try {
                  addDependencyFactoryToContainer(dependencyFactoryClass.newInstance());
                  Avicenna.dependencyFactories.add(dependencyFactoryClass);
              } catch (InstantiationException e) {
                  e.printStackTrace();
                  throw new RuntimeException(e);
              } catch (IllegalAccessException e) {
                  e.printStackTrace();
                  throw new RuntimeException(e);
              }
          }
      }
docs: Adds classes annotated by {@link org.labcrypto.avicenna.DependencyFactory}. Added class
  has some methods or fields which supplied dependencies.
  
  @param dependencyFactoryClasses An object annotated by {@link org.labcrypto.avicenna.DependencyFactory}.