Чтобы следовать принципам SOLID, вы должны подумать о реальном назначении класса Foo. Поскольку я не знаю деталей имплементации и внутренней работы Foo, я не могу сказать много. Но не будет ли этот дизайн более традиционным?
class Foo
{
IPersistancePresenter persistancePresenter;
public Foo(IPersistancePresenter persistancePresenter)
{
persistancePresenter = persistancePresenter;
}
}
interface IPersistancePresenter <T>
{
IList<T> GetInstancesOf<T>();
}
Foo не изменится (так как это не должно быть обязанностью Foo), если позже будет другой класс, кроме Foo, который должен быть сохранен и иметь экземпляры, собранные во время выполнения.