The @TypeResolver@ interface allows you to add interfaces that a framed element will implement. These are in addition to the interface that was passed in to the framing method, and EdgeFrame or VertexFrame.

```java
public interface TypeResolver {

	/**
	 * @param v The vertex being framed.
	 * @param defaultType The default as passed in to the framing method. 
	 * @return Any additional interfaces that the frame should implement.
	 */
	Class<?>[] resolveTypes(Vertex v, Class<?> defaultType);
	/**
	 * @param e The edge being framed.
	 * @param defaultType The default as passed in to the framing method.
	 * @return Any additional interfaces that the frame should implement.
	 */
	Class<?>[] resolveTypes(Edge e, Class<?> defaultType);
}
```

To use the type resolver, register it via a module supplied to the @FramedGraphFactory@.
```java
TypeResolver myTypeResolver = new TypeResolver() {
  public Class<?>[] resolveTypes(Edge e, Class<?> defaultType) {
    return new Class[] { AdditionalEdge.class }; //Add the AdditionalEdge interface
  }

  public Class<?>[] resolveTypes(Vertex v, Class<?> defaultType) {
    return new Class[] { AdditionalVertex.class }; //Add the AdditionalVertex interface
  }
};

FramedGraph g = new FramedGraphFactory(new AbstractModule() {
  public void doConfigure(FramedGraphConfiguration config) {
    config.addTypeResolver(myTypeResolver);
  }
}).create(baseGraph);


Person p = g.addVertex(Person.class); //p is also an instance of AdditionalVertex
AdditionalVertex av = (AdditionalVertex) p;
```
Every registered @TypeResolver@ is called before returning the new element.

Some possible use cases
* You want to use information stored on the graph to create elements of different types.