Я пытаюсь реализовать фабрику, которая возвращает класс, на основе того, с каким общим вызовом он вызван.Тип возврата конкретного завода по умолчанию
я в настоящее время он работает так:
public static TRepository GetInstance<T, TRepository>()
where TRepository : IRepository<T>, new()
{
return new TRepository();
}
Назвать это так:
InvoiceRepository repo = RepositoryFactory.GetInstance<Invoice, InvoiceRepository>();
Это работает, но я предпочел бы не объявить тип возвращаемого значения. Я хотел бы назвать это так:
InvoiceRepository repo = RepositoryFactory.GetInstance<Invoice>();
Это не очень важно, но это только беспокоит меня, и мне очень интересно, если есть какие-либо очевидные решения.
Какой тип должен построить завод? Должен ли он искать загруженные сборки для типов, реализующих интерфейс 'IRepository'? –
Не уверен, что это риторический вопрос, но да, он должен вернуть реализацию IRepository, так как есть только один из них. e: Я все еще студент, и это очень возможно. Я немного забываю о чем-то, что может быть очевидно для других. –
ihendriks
На фабрике вы можете создать частный словарь ('Dictionary'), который отображает различные типы 'T' и соответствующие им типы репозитория. Затем, когда вас попросят построить репозиторий, вы можете использовать словарь для получения типа репозитория, а затем использовать отражение для создания типа репозитория. –