У меня есть настройки хранилища, как показано ниже.Использование универсального репозитория интерфейса
interface IRepository<T> where T : DataRow
{
T Get(int key);
}
interface ICartonRepository : IRepository<CartonDataRow>
{
}
class CartonRepository : ICartonRepository
{
public CartonDataRow Get(int key)
{
}
}
У меня также есть PackRepository, который определяется таким же образом, как CartonRepository. Я хотел бы сделать что-то вроде следующего.
IRepository<DataRow> repository;
switch (rowType)
{
case Carton:
repository = new CartonRepository();
break;
case Pack:
repository = new PackRepository();
break;
}
Есть ли способ, которым я могу это достичь?
То, что у вас есть, прекрасно в теории, если у вас есть правильный способ определения того, как конкретный репозиторий сопоставляется с «rowType», с которым вы столкнулись. Есть ли что-то конкретное, что не работает? –
Не уверен, что я понимаю намерение - если вы объявляете репозиторий как IRepository, тогда вызовы его метода Get возвращают тип DataRow типа компиляции, а не один из его подклассов. В таком сценарии вы можете просто отказаться от родового из IRepository и вернуть его DataRow :) –