code: @Override
  	public void inject(Configuration config) {
  
  		Set<Field> fields = config.getInjectionTargets(InjectionCategory.ICKLE_SERVICE);
  		Class<? extends Object> implementationClass = null;
  		
  		for (Field field : fields) {
  			
  			try {
  				
  				if(!field.isAccessible()) field.setAccessible(true);
  				
  				Class<? extends Object> contractClass = field.getType();
  				IckleService ickleService = contractClass.getAnnotation(IckleService.class);
  				implementationClass = ickleService.value();
  				
  				try {
  					
  					field.set(config.getContext(), implementationClass.newInstance());
  				}
  				catch(InstantiationException ie) {
  					
  					Constructor<? extends Object> constructor = implementationClass.getConstructor(Context.class);
  					
  					if(constructor == null) {
  						
  						StringBuilder errorContext = new StringBuilder()
  						.append("The Ickle Service implementation ")
  						.append(implementationClass.getSimpleName())
  						.append(" must expose a public no-argument constructor ")
  						.append("or a constructor which takes only a single ")
  						.append(Context.class.getName())
  						.append(". ");
  						
  						throw new InjectionException(new InstantiationException(errorContext.toString()));
  					}
  					else {
  					
  						Context baseContext = ContextUtils.discover(config.getContext());
  						field.set(config.getContext(), constructor.newInstance(baseContext));
  					}
  				}
  			} 
  			catch (Exception e) {
  				
  				StringBuilder errorContext = new StringBuilder()
  				.append("Ickle Service injection failed");
  				
  				if(implementationClass != null) {
  					
  					errorContext.append(" for ")
  					.append(implementationClass.getName())
  					.append(". ");
  				}
  				else {
  					
  					errorContext.append(". ");
  				}
  				
  				Log.e(getClass().getName(), errorContext.toString(), e);
  			}
  		}
  	}
docs: {@inheritDoc}