I always keep a copy of the tapestry source code handy. If I search "*Module.java" for AssetFactory I find out how tapestry adds a ContextAssetFactory and a ClasspathAssetFactory.
@Marker(ContextProvider.class) public AssetFactory buildContextAssetFactory(ApplicationGlobals globals, AssetPathConstructor assetPathConstructor, AssetPathConverter converter) { return new ContextAssetFactory(assetPathConstructor, globals.getContext(), converter); } @Marker(ClasspathProvider.class) public AssetFactory buildClasspathAssetFactory(ResourceDigestManager resourceDigestManager, ClasspathAssetAliasManager aliasManager, AssetPathConverter converter) { ClasspathAssetFactory factory = new ClasspathAssetFactory(resourceDigestManager, aliasManager, converter); resourceDigestManager.addInvalidationListener(factory); return factory; } public void contributeAssetSource(MappedConfiguration<String, AssetFactory> configuration, @ContextProvider AssetFactory contextAssetFactory, @ClasspathProvider AssetFactory classpathAssetFactory) { configuration.add(AssetConstants.CONTEXT, contextAssetFactory); configuration.add(AssetConstants.CLASSPATH, classpathAssetFactory); }