private static IEnumerable<Type> GetKnownTypes()
{
Type pathType = typeof (IPath);
Type outputDescriptionType = typeof (IOutputDescription);
Type dataSourceShapeType = typeof (IDataSourceShape);
List<Type> knownTypes = typeof (OutputDescription).Assembly.GetTypes()
.Where(t => pathType.IsAssignableFrom(t) && t != pathType ||
outputDescriptionType.IsAssignableFrom(t) && t != outputDescriptionType ||
dataSourceShapeType.IsAssignableFrom(t) && t != dataSourceShapeType).ToList();
return knownTypes;
}