2020-10-14 13:27:01 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
namespace COA.EnterpriseServices.DataAccess
|
|
|
|
|
{
|
2020-10-14 16:02:05 +00:00
|
|
|
|
public class DataAccessManager<T> where T : class, IRecord
|
2020-10-14 13:27:01 +00:00
|
|
|
|
{
|
2020-10-14 16:02:05 +00:00
|
|
|
|
private static readonly IDictionary<string, string[]> enabledDataAccess = new Dictionary<string, string[]>
|
2020-10-14 15:03:25 +00:00
|
|
|
|
{
|
|
|
|
|
#region Creditor
|
|
|
|
|
|
|
|
|
|
["COA.EnterpriseServices.DataAccess.Entities.Creditor"] = new[]
|
|
|
|
|
{
|
|
|
|
|
"COA.EnterpriseServices.DataAccess.QuickBase.QuickBaseDataAccess",
|
|
|
|
|
"COA.EnterpriseServices.DataAccess.EntityFramework.EntityDataAccess"
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Client
|
|
|
|
|
|
|
|
|
|
["COA.EnterpriseServices.DataAccess.Entities.Client"] = new[]
|
|
|
|
|
{
|
|
|
|
|
"COA.EnterpriseServices.DataAccess.QuickBase.QuickBaseDataAccess",
|
|
|
|
|
"COA.EnterpriseServices.DataAccess.EntityFramework.EntityDataAccess"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
};
|
2020-10-14 13:27:01 +00:00
|
|
|
|
|
2020-10-14 16:02:05 +00:00
|
|
|
|
public TResult Invoke<TResult>(Func<IDataAccess<T>, TResult> func)
|
|
|
|
|
{
|
|
|
|
|
var results = new List<TResult>();
|
|
|
|
|
var dataAccessInstances = GetEnabledDataAccess();
|
|
|
|
|
|
|
|
|
|
foreach (var dataAccessInstance in dataAccessInstances)
|
|
|
|
|
{
|
|
|
|
|
results.Add(func(dataAccessInstance));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if the "EF" version invokes first, return that value
|
|
|
|
|
return results.FirstOrDefault(r => r != null && !r.Equals(default(TResult)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private ICollection<IDataAccess<T>> GetEnabledDataAccess()
|
2020-10-14 13:27:01 +00:00
|
|
|
|
{
|
2020-10-14 15:03:25 +00:00
|
|
|
|
var type = typeof(T);
|
|
|
|
|
|
2020-10-14 16:02:05 +00:00
|
|
|
|
// load data access based on active configuration
|
2020-10-14 13:27:01 +00:00
|
|
|
|
return Dependencies.Container
|
|
|
|
|
.GetAllInstances<IDataAccess<T>>()
|
2020-10-14 15:03:25 +00:00
|
|
|
|
.Where(i =>
|
|
|
|
|
{
|
|
|
|
|
var dataAccessType = i.GetType().FullName;
|
|
|
|
|
|
2020-10-14 16:02:05 +00:00
|
|
|
|
return enabledDataAccess.ContainsKey(type.FullName) && enabledDataAccess[type.FullName].Any(a => dataAccessType.StartsWith(a));
|
2020-10-14 15:03:25 +00:00
|
|
|
|
})
|
2020-10-14 13:27:01 +00:00
|
|
|
|
.OrderBy(i => i.GetType().Name.StartsWith("QuickBase", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
.ToList();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|