To obey SOLID principles you should think about real purpose of Foo class. As I dont know impementation details and internal workings of Foo I can not say much. But would not this design be more conventional ?
class Foo
{
IPersistancePresenter persistancePresenter;
public Foo(IPersistancePresenter persistancePresenter)
{
persistancePresenter = persistancePresenter;
}
}
interface IPersistancePresenter <T>
{
IList<T> GetInstancesOf<T>();
}
Foo will not change (as it should not be Foo's responsibility) if later there would be another class than the Foo, that must be persisted and have instances collected at runtime.