I wonder if this API is not trying to do too many things.
Anyway, I was thinking of something like:

```
		propertyReader.property( OgmProperties.GRID_DIALECT, GridDialect.class )
				.withDefault( "infinispan" )
				.withInstantiator( new GridDialectInstantiator( datastore ) )
					.withClassLoaderService( registry.getService( ClassLoaderService.class ) )
					.withDefaultType( registry.getService( DatastoreProvider.class ).getDefaultDialect() )
					.withTypeResolver( ShrotNameResolver.INSTANCE )
				.getValue();
```

or something like this:

```
		propertyReader.property( OgmProperties.GRID_DIALECT, GridDialect.class )
				.withDefault( "infinispan" )
				.createInstance()
					.withInstantiator( new GridDialectInstantiator( datastore ) )
					.withClassLoaderService( registry.getService( ClassLoaderService.class ) )
					.withDefaultType( registry.getService( DatastoreProvider.class ).getDefaultDialect() )
					.withTypeResolver( ShrotNameResolver.INSTANCE )
				.getValue();
```
This way you only need those properties only if you are trying to create an instance of something form the value of the property.