public override IEnumerable <IGetter> GetMembers(Type t) { // First check if exist in members dictionary List <IGetter> ms; if (!members.TryGetValue(t, out ms)) { DynamicGetterBuider builder = new DynamicGetterBuider(t); ms = new List <IGetter>(); foreach (MemberInfo m in t.GetMembers()) { IGetter getter = null; if (ShoudlLog(m, out getter)) { // 1. Create the class that extends AbstractGetter for that member m in domain type t. Type getterType = builder.GenerateGetterFor(m); // 2. Instantiate the class created on 1. getter = (IGetter)Activator.CreateInstance(getterType); ms.Add(getter); } } members.Add(t, ms); } return(ms); }
public void TestDynamicGetterForStudentNr() { // // Arrange // DynamicGetterBuider builder = new DynamicGetterBuider(typeof(Student)); Type getterType = builder.GenerateGetterFor(typeof(Student).GetField("nr")); IGetter getter = (IGetter)Activator.CreateInstance(getterType); // builder.SaveModule(); // // Act // Student st = new Student(762354, "Ze Manel", 13, "zemanel"); Assert.Equal("nr", getter.GetName()); Assert.Equal(762354, getter.GetValue(st)); }