public void NonImplementingWrapper() { IClass c = _g.Class("NonImplemening").In(_namespace).Public; { CreateClassMembers(c); } var t = ((Emitter)_g).Generate(c); var sut = t.GetConstructor(new[] { _interface }).Invoke(new object[] { _mock }); var simpleMethod = t.GetMethod(_methodName, new[] { typeof(int).MakeByRefType() }); object[] parameters = new object[] { _refParameter }; simpleMethod.Invoke(sut, parameters); _refParameter = (int)parameters[0]; Assert.That(_refParameter, Is.EqualTo(_expectedValue)); _mock.AssertWasCalled(x => x.OutParamMethod(out _refParameter)); }
private IClass DefineProxy() { _interfaceType = typeof(T); ProcessMarkingAttribute(_interfaceType); MapMethods(); // public class ProxyIValueObject : ChangeTrackerBase, IValueObject _proxy = g.Class("Proxy" + _interfaceType.Name).In(_namespace).Inherits(_baseType).Implements(_interfaceType).Public; { // private readonly IValueObject _target; _target = _proxy.Field(_interfaceType, "_target").Internal.ReadOnly; ImplConstructor(); var pi = _baseType.GetProperty( "Target", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (pi != null && pi.PropertyType.IsAssignableFrom(_interfaceType) && pi.GetGetMethod(true).IsAbstract&& pi.GetSetMethod(true) == null) { ImplTargetProperty(pi); } ImplGetTarget(); ImplInterface(); } return(_proxy); }
private IClass DefineWrapper() { IClass c = _g.Class("HodgepodgeWrapper").In(_namespace).Implements(_interface); { var wrapped = c.Field(_interface, _wrappedFieldName); var ctor = c.Constructor(_g.Arg <IHodgepodge>("wrapped")).Public; using (var c1 = ctor.Code()) { c1.Assign(wrapped, ctor.Args[0]); } foreach (MemberInfo info in _interface.GetMembers(BindingFlags.Public | BindingFlags.Instance)) { switch (info.MemberType) { case MemberTypes.Method: MethodInfo mi = (MethodInfo)info; if (!mi.IsSpecialName) { WrapMethod(c, wrapped, mi); } break; case MemberTypes.Property: PropertyInfo pi = (PropertyInfo)info; WrapProperty(c, wrapped, pi); break; default: Console.WriteLine(info + " : " + info.MemberType); break; } } } return(c); }