コード例 #1
0
        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));
        }
コード例 #2
0
ファイル: Factory.cs プロジェクト: kk1000/kennethxublogsource
            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);
            }
コード例 #3
0
        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);
        }