If I understand your question correctly, the answer is both Factory and Strategy. The Strategy object knows how to work with a particular data source and the Factory knows which Strategy object to give you based on the alias provided.
var dataStrategy = dataFactory.GetStrategyByAlias(alias);
dataStrategy.Insert(data);
Your concrete Strategy classes can override an Alias property to assist the Factory like so:
interface IDataStrategy {
string Alias { get; }
void Insert(MyDataClass data);
}
class ConcreteStrategy : IDataStrategy{
string Alias {
get{
return "Some Data source alias";
}
}
}
class DataFactory{
private IDataStrategy[] _strategies;
public IDataStrategy GetStrategyByAlias(string alias){
return _strategies.FirstOrDefault(x => x.Alias == alias);
}
}
If the consuming object has a ready list of the strategies then the Factory may be overkill as it could just execute the same Linq statement.