Я определил базовый Dataconnection type:
Код: Выделить всё
public abstract class DataConnection
{
public Guid Id { get; set; }
public string Type { get; set; }
}
< /code>
, который будет использоваться в качестве базы для различных видов соединений данных, например: < /p>
public class HttpDataConnection : DataConnection
{
public Uri Url { get; set; }
}
Код: Выделить всё
public abstract class DataClient
where T : DataConnection
{
T Connection { get; set; }
Task GetDataEntriesAsync(CancellationToken token = default);
}
< /code>
Это будет расширено для создания клиентов, специфичных для типа соединения: < /p>
public class HttpDataClient : DataClient
{
public async Task GetDataEntriesAsync(CancellationToken token = default)
{
// Make HTTP request to fetch data here
}
}
< /code>
Я хотел бы создать единую точку входа, чтобы принести правильный тип клиента на основе данного соединения для передачи данных, аналогично этим: < /p>
public static class DataClientGenerator
{
public static DataClient GenerateClientFromConnection(T connection)
where T : DataConnection
{
if (connection is HttpDataConnection httpDataConnection)
{
return new HttpDataClient(connection); // Line causing issue
}
else if (connection is SomeFutureDataClientType otherType)
{
return new SomeFutureDataClientType(connection); // Will also cause an issue
}
throw new Exception("Unable to create DataClient");
}
}
< /code>
, который позволит использовать его так: < /p>
public async Task GetDataFromConnection(
T connection,
CancellationToken token = default
)
where T : DataConnection
{
DataClient client = DataClientGenerator.GenerateClientFromConnection(connection);
return await client.GetDataEntriesAsync(token);
}
< /code>
Однако класс DataClientGenerator < /code> имеет ошибку компилятора при возвращении сгенерированного клиента: < /p>
не может преобразовать тип выражения 'httpdataclient', чтобы вернуть тип 'DataClient' < /p>
< /blockquote> warding this a with this wableting '< /p>
Httpdataclient
Как я могу изменить структуру класса, чтобы сделать это? соединение, которое необходимо для доступа к источнику данных.
Подробнее здесь: https://stackoverflow.com/questions/797 ... eturned-fr