我有多個數據源接口的實現。 它有一個方法CanGet可以用來發現它是否可以源自一個特定的類型,然後用另一個Get來執行它。 我試圖編碼這個特定的實現,但它確實喜歡從FindSource傳遞GetCostLedger,因爲類型不匹配。我看不到如何讓這個工作。 感謝您的幫助。將鍵入的Func返回爲通用Func
private Func<IEnumerable<T>> FindSource<T>() where T : class
{
if (typeof(CostLedger).IsAssignableFrom(typeof(T)))
return GetCostLedger;
if (typeof(EquipmentInventory).IsAssignableFrom(typeof(T)))
return GetEquipmentInventory;
if (typeof(ActivePavingJobs).IsAssignableFrom(typeof(T)))
return GetActivePavingJobs;
return null;
}
public IEnumerable<T> GetData<T>() where T : class
{
var source = FindSource<T>();
if (source != null)
return source.Invoke();
throw new NotImplementedException();
}
public bool CanGet<T>() where T : class
{
return FindSource<T>() != null;
}
private IEnumerable<CostLedger> GetCostLedger()
{
//Implementation clipped
}
private IEnumerable<EquipmentInventory> GetEquipmentInventory()
{
//Implementation clipped
}
private IEnumerable<ActivePavingJobs> GetActivePavingJobs()
{
//Implementation clipped
}
的應用案例這個代碼是在運行了很多轉換的ETL過程 數據源是從工廠調用的實現注入,像這樣
_destination.SaveData(
_mapper.Find<IEnumerable<CostLedger>, LaborAndEquipmentAnalysis>()
.Process(_source.First(x => x.CanGet<CostLedger>())
.GetData<CostLedger>(), dashboardName, DateTime.UtcNow));
澄清我的例子,以幫助解釋爲什麼我正在做我正在做的事情。 –