package org.eclipse.app4mc.transformation.extensions;

public interface ICustomObjectsStore {
	public <T> T getInstance(Object cls);

	public <T> void injectMembers(Object cls, T instance);

	public <T> void indexData(String key, T value);

	public <T> T getData(String key);

	public void clearCache();

}
