using MTWorkHR.Core.Entities; using MTWorkHR.Core.IRepositories.Base; using MTWorkHR.Core.UnitOfWork; using MTWorkHR.Infrastructure.Data; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace MTWorkHR.Infrastructure.UnitOfWorks { public class UnitOfWorkLog : IUnitOfWorkLog { private readonly HRDataContext context; public IRepositoryLog UserLog { get; } public IRepositoryLog AuthenticateLog { get; } public IRepositoryLog FileLog { get; } public IRepositoryLog RoleLog { get; } public IRepositoryLog SettingLog { get; } public IRepositoryLog SmsLog { get; } public UnitOfWorkLog(HRDataContext _context , IRepositoryLog userLog , IRepositoryLog authenticateLog , IRepositoryLog FileLog , IRepositoryLog RoleLog , IRepositoryLog settingLog , IRepositoryLog SmsLog ) { context = _context; UserLog = userLog; AuthenticateLog = authenticateLog; this.FileLog = FileLog; this.RoleLog = RoleLog; this.SettingLog = settingLog; this.SmsLog = SmsLog; } public async Task CompleteAsync() { return await context.SaveChangesAsync(); } public object GetRepositoryByName(string name) { Type type = this.GetType(); PropertyInfo info = type.GetProperty(name); if (info == null) throw new Exception(String.Format( "A property called {0} can't be accessed for type {1}.", name, type.FullName)); var value = info.GetValue(this, null); // value = Convert.ChangeType(value, type); return value; } } }