Как сказано в комментариях, это само по себе невозможно, потому что соединения должны иметь что-то общее, чтобы их можно было абстрагировать как общие.Вы используете сторонние компоненты, но, поскольку вы пытаетесь использовать их на одной фабрике, я полагаю, что вы хотите получить от них одинаковые данные.Поэтому я предлагаю определить интерфейс, в котором вы определяете общую часть, которая вам нужна:
public interface IConnection{
string GetConnectionString();
...
}
Чем вы оборачиваете свои соединения сторонней организации:
public class SomebaseWrapper : IConnection{
public SomebaseWrapper(SomeBase b){
}
...
}
Чем вы запрашиваете обертку вваша фабрика:
public interface ISourceFactory {
T GetSource<T>() where T is IConnection;
}
И, наконец, вы запрашиваете SomebaseWrapper и реализуете его так:
public T GetSource<T>() where T : IConnection
{
Type listType = typeof(T);
if (listType == typeof(SomebaseWrapper))
{
return new SomebaseWrapper(_connection.GetSource<SomeBase>());
}
if (listType == typeof(ExternalBaseWrapper))
{
return new (ExternalBaseWrapper)(_exconnection.GetSource<T>());
}
throw new Exception("Not supported");
}