using MTWorkHR.Core.Entities; using MTWorkHR.Core.IRepositories.Base; using MTWorkHR.Core.UnitOfWork; using MTWorkHR.Infrastructure.DBContext; 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> UserLog { get; } public IRepositoryLog<AuthLog> AuthLog { get; } public IRepositoryLog<FileLog> FileLog { get; } public IRepositoryLog<RoleLog> RoleLog { get; } public IRepositoryLog<SettingLog> SettingLog { get; } public IRepositoryLog<UserTaskLog> UserTaskLog { get; } public IRepositoryLog<TeamLog> TeamLog { get; } public IRepositoryLog<MeetingLog> MeetingLog { get; } public IRepositoryLog<AttendanceLog> AttendanceLog { get; } public UnitOfWorkLog(HRDataContext _context , IRepositoryLog<UserLog> userLog , IRepositoryLog<AuthLog> authenticateLog , IRepositoryLog<FileLog> FileLog , IRepositoryLog<RoleLog> RoleLog , IRepositoryLog<SettingLog> settingLog , IRepositoryLog<UserTaskLog> userTaskLog , IRepositoryLog<TeamLog> teamLog , IRepositoryLog<MeetingLog> meetingLog , IRepositoryLog<AttendanceLog> attendanceLog ) { context = _context; UserLog = userLog; AuthLog = authenticateLog; this.FileLog = FileLog; this.RoleLog = RoleLog; this.SettingLog = settingLog; this.UserTaskLog = userTaskLog; this.TeamLog = teamLog; this.MeetingLog = meetingLog; this.AttendanceLog = attendanceLog; } public async Task<int> 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; } } }