package com.ctrip.framework.apollo.build;
import java.util.Map;
import com.ctrip.framework.apollo.internals.DefaultInjector;
import com.ctrip.framework.apollo.internals.Injector;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Maps;
import com.google.common.collect.Table;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public class MockInjector implements Injector {
private static Map<Class, Object> classMap = Maps.newHashMap();
private static Table<Class, String, Object> classTable = HashBasedTable.create();
private static Injector delegate = new DefaultInjector();
@Override
public <T> T getInstance(Class<T> clazz) {
T o = (T) classMap.get(clazz);
if (o != null) {
return o;
}
if (delegate != null) {
return delegate.getInstance(clazz);
}
return null;
}
@Override
public <T> T getInstance(Class<T> clazz, String name) {
T o = (T) classTable.get(clazz, name);
if (o != null) {
return o;
}
if (delegate != null) {
return delegate.getInstance(clazz, name);
}
return null;
}
public static void setInstance(Class clazz, Object o) {
classMap.put(clazz, o);
}
public static void setInstance(Class clazz, String name, Object o) {
classTable.put(clazz, name, o);
}
public static void setDelegate(Injector delegateInjector) {
delegate = delegateInjector;
}
public static void reset() {
classMap.clear();
classTable.clear();
delegate = null;
}
}