Shouldn't the factory be in a seperate file (ListProviderFactory)? That way the IListProvider interface also stays header-only.