Example #1
0
        private string ParseSetStringFromProxEntity(TEntity proxyEntity, List <IDbDataParameter> dbParameters)
        {
            Dictionary <string, object> modifiedProperties = DynamicProxy.GetModifiedProperties(proxyEntity);
            List <string> values = this.ParseFromProxyEntityDictionary(modifiedProperties, dbParameters);

            return(string.Join(",", values));
        }
Example #2
0
        private static Tuple <DbConnection, DbTransaction> GetStore(ObjectContext objectContext)
        {
            DbConnection dbConnection     = objectContext.Connection;
            var          entityConnection = dbConnection as EntityConnection;

            // by-pass entity connection
            if (entityConnection == null)
            {
                return(new Tuple <DbConnection, DbTransaction>(dbConnection, null));
            }

            DbConnection connection = entityConnection.StoreConnection;

            // get internal transaction
            dynamic connectionProxy   = new DynamicProxy(entityConnection);
            dynamic entityTransaction = connectionProxy.CurrentTransaction;

            if (entityTransaction == null)
            {
                return(new Tuple <DbConnection, DbTransaction>(connection, null));
            }

            DbTransaction transaction = entityTransaction.StoreTransaction;

            return(new Tuple <DbConnection, DbTransaction>(connection, transaction));
        }
Example #3
0
        public void TestMethodNulls()
        {
            var     t = new TestWrapper();
            dynamic w = new DynamicProxy(t);

            string r = w.EchoInternal(null);

            Assert.Equal("Internal: ", r);

            r = w.EchoInternal2(1);
            Assert.Equal("Int: 1", r);
            r = w.EchoInternal2("Test");
            Assert.Equal("String: Test", r);

            r = w.EchoInternal2("Test", "Testing");
            Assert.Equal("Name: Test Value: Testing", r);

            r = w.EchoInternal2("Test", null);
            Assert.Equal("Name: Test Value: ", r);


            r = w.EchoInternal3("Test", "Testing", null);
            Assert.Equal("Name: Test Value: Testing Value2: ", r);

            r = w.EchoInternal3("Test", 1, null);
            Assert.Equal("Name: Test Value: 1 Value2: ", r);
        }
Example #4
0
        /// <summary>
        /// 获取数据库的事务信息
        /// </summary>
        /// <param name="objectContext"></param>
        /// <returns></returns>
        private Tuple <DbConnection, DbTransaction> GetStore(ObjectContext objectContext)
        {
            DbConnection dbConnection     = objectContext.Connection;
            var          entityConnection = dbConnection as EntityConnection;

            if (entityConnection == null)
            {
                return(new Tuple <DbConnection, DbTransaction>(dbConnection, null));
            }

            DbConnection connection = entityConnection.StoreConnection;

            // 动态获取当前的数据库事务
            dynamic connectionProxy   = new DynamicProxy(entityConnection);
            dynamic entityTransaction = connectionProxy.CurrentTransaction;

            if (entityTransaction == null)
            {
                return(new Tuple <DbConnection, DbTransaction>(connection, null));
            }

            DbTransaction transaction = entityTransaction.StoreTransaction;

            return(new Tuple <DbConnection, DbTransaction>(connection, transaction));
        }
Example #5
0
        static void Main(string[] args)
        {
            //test();

            Console.WriteLine("");
            Console.WriteLine("CustomProxy Sample");
            Console.WriteLine("================");
            Console.WriteLine("");
            // Create an instance of MyProxy.
            DynamicProxy myProxyInstance = new DynamicProxy(typeof(Cicada));
            // Get a CustomServer proxy.
            IAnimal myHelloServer = (Cicada)myProxyInstance.GetTransparentProxy();

            // Get stubdata.
            Console.WriteLine("GetStubData = " + RealProxy.GetStubData(myProxyInstance).ToString());
            // Get ProxyType.
            Console.WriteLine("Type of object represented by RealProxy is :"
                              + myProxyInstance.GetProxiedType());
            //myHelloServer.HelloMethod("RealProxy Sample");
            myHelloServer.Eating();
            //Console.WriteLine("");
            // Get a reference object from server.
            //Console.WriteLine("Create an objRef object to be marshalled across Application Domains...");
            //ObjRef CustomObjRef = myProxyInstance.CreateObjRef(typeof(CustomServer));
            //Console.WriteLine("URI of 'ObjRef' object =  " + CustomObjRef.URI);
        }
        public void Remove(Action <TAppModel> condition)
        {
            TAppModel local = DynamicProxy.CreateDynamicProxy <TAppModel>();

            condition(local);
            this._context.EntitySet <TDbEntity>().DeleteBy(DynamicProxy.GetModifiedProperties(local));
        }
        public void Update(TAppModel entity)
        {
            TDbEntity target = DynamicProxy.CreateDynamicProxy <TDbEntity>();

            EntityMapper.Map <TAppModel, TDbEntity>(entity, target);
            this._context.EntitySet <TDbEntity>().Update(target);
        }
Example #8
0
        public IRepository <T> Create <T>(CreateType createType = CreateType.DynamicProxy)
        {
            IRepository <T> repository = null;

            switch (createType)
            {
            case CreateType.DynamicProxy:
                repository = new DynamicProxy <IRepository <T> >().Create(new Repository <T>(),
                                                                          s => logger.Info($"{s}"),
                                                                          e => logger.Error($"{e}"),
                                                                          o => o?.ToString(),
                                                                          TaskScheduler.Current);
                break;

            case CreateType.AuthenticationProxy:
                repository = new AuthenticationProxy <IRepository <T> >().Create(Create <T>(CreateType.DynamicProxy), TaskScheduler.Current);
                break;

            case CreateType.PerformanceProxy:
                repository = new PerformanceProxy <IRepository <T> >().Create(Create <T>(CreateType.AuthenticationProxy));
                break;

            case CreateType.LoggerRepository:
                repository = new LoggerRepository <T>(new Repository <T>());
                break;
            }
            return(repository);
        }
    static void Main(string[] args)
    {
        FreeSql.DynamicProxy.GetAvailableMeta(typeof(MyClass)); //The first dynamic compilation was slow
        var dt = DateTime.Now;
        var pxy = new MyClass {
            T2 = "123123"
        }.ToDynamicProxy();

        Console.WriteLine(pxy.Get("key"));
        Console.WriteLine(pxy.GetAsync().Result);
        pxy.Text = "testSetProp1";
        Console.WriteLine(pxy.Text);

        Console.WriteLine(DateTime.Now.Subtract(dt).TotalMilliseconds + " ms\r\n");

        dt  = DateTime.Now;
        pxy = new MyClass().ToDynamicProxy();
        Console.WriteLine(pxy.Get("key1"));
        Console.WriteLine(pxy.GetAsync().Result);
        pxy.Text = "testSetProp2";
        Console.WriteLine(pxy.Text);

        Console.WriteLine(DateTime.Now.Subtract(dt).TotalMilliseconds + " ms\r\n");

        var api = DynamicProxy.Resolve <IUserApi>();

        api.Add(new UserInfo {
            Id = "001", Remark = "add"
        });
        Console.WriteLine(JsonConvert.SerializeObject(api.Get <UserInfo>("001")));
    }
Example #10
0
        /// <summary>
        /// 使用 CZGL.AOP 处理容器中需要代理的类型
        /// </summary>
        /// <param name="service"></param>
        /// <returns></returns>
        public static IContainer BuildAopProxy(this IContainer service)
        {
            if (service is null)
            {
                throw new ArgumentNullException(nameof(service));
            }

            ContainerBuilder proxyServiceCollection          = new ContainerBuilder();
            IEnumerable <IComponentRegistration> serviceList = service.ComponentRegistry.Registrations;

            foreach (ComponentRegistration item in serviceList)
            {
                Type newType;
                Type serviceType        = item.Services.OfType <IServiceWithType>().Select(x => x.ServiceType).FirstOrDefault();
                Type implementationType = item.Activator.LimitType;
                if (implementationType?.GetCustomAttribute(typeof(InterceptorAttribute)) == null)
                {
                    proxyServiceCollection.RegisterComponent(item);
                    continue;
                }
                if (serviceType == implementationType)
                {
                    newType = DynamicProxy.CreateProxyClassType(implementationType);
                }
                else
                {
                    newType = DynamicProxy.CreateProxyClassType(serviceType, implementationType, false);
                }
                proxyServiceCollection.RegisterComponent(item);
                proxyServiceCollection.RegisterType(newType).As(serviceType);
            }
            return(proxyServiceCollection.Build());
        }
Example #11
0
        public override Expression <TDelegate> ToLambda()
        {
            DynamicProxy            proxy         = GetDynamicProxy();
            ConstructorDeclaration  constructor   = null;
            IEnumerable <Parameter> outParameters = null;
            var typeResolver = DummyArgumentsResolver.Instance;
            IEnumerable <ParameterExpression> parameters = null;
            var visitor = new GenericTypesTransformerVisitor();

            NRefactory.ConstructorDeclaration constructorDeclaration = null;
            MethodDefinition methodDefinition = _ctor.ResolveConstructorDefinition();
            var lambdaExpressionVisitor       = new LambdaExpressionVisitor <NRefactory.ConstructorDeclaration>();

            constructorDeclaration = methodDefinition.ResolveMothod <NRefactory.ConstructorDeclaration>();
            constructorDeclaration = constructorDeclaration.AcceptVisitor(visitor, typeResolver) as NRefactory.ConstructorDeclaration;
            constructorDeclaration.AcceptVisitor(new ThisAdditionalReturnStatmentVisitor(), null);
            outParameters          = proxy.GetOutParameters(constructorDeclaration);
            constructor            = AstExpression.Constructor(constructorDeclaration, proxy.ProxiedType, outParameters, new NRefactoryAstVisitor());
            constructorDeclaration = constructorDeclaration.AcceptVisitor(lambdaExpressionVisitor);
            parameters             = constructor.Parameters.Concat(constructor.ContextParameter);

            return(Expression.Lambda <TDelegate>(
                       Expression.Block(new[] { constructor.ContextParameter },
                                        constructor),
                       constructor.Parameters));
        }
Example #12
0
        private DynamicProxy CreateDynamicProxy()
        {
            string serviceWsdlUri = ServiceAddress;

            // create the dynamic proxy factory, that downloads the service metadata
            // and create the dynamic factory.
            DynamicProxyFactory factory = new DynamicProxyFactory(serviceWsdlUri);

            //Setup timeout
            var bindingList = factory.Bindings;

            if (bindingList != null)
            {
                foreach (var binding in bindingList)
                {
                    binding.OpenTimeout    = new TimeSpan(0, 30, 0);
                    binding.ReceiveTimeout = new TimeSpan(0, 30, 0);
                    binding.SendTimeout    = new TimeSpan(0, 30, 0);
                    binding.CloseTimeout   = new TimeSpan(0, 30, 0);
                }
            }
            // operations
            DynamicProxy proxy = factory.CreateProxy(OperationContractName);

            return(proxy);
        }
        public static Type ExtractType(string strType)
        {
            var typeAttrInObject = Serializer.TypeAttrInObject;

            if (strType != null &&
                strType.Length > typeAttrInObject.Length &&
                strType.Substring(0, typeAttrInObject.Length) == typeAttrInObject)
            {
                var propIndex = typeAttrInObject.Length;
                var typeName  = Serializer.UnescapeSafeString(Serializer.EatValue(strType, ref propIndex));

                var type = JsConfig.TypeFinder.Invoke(typeName);

                if (type == null)
                {
                    Tracer.Instance.WriteWarning("Could not find type: " + typeName);
                    return(null);
                }

#if !SILVERLIGHT && !MONOTOUCH
                if (type.IsInterface || type.IsAbstract)
                {
                    return(DynamicProxy.GetInstanceFor(type).GetType());
                }
#endif

                return(type);
            }
            return(null);
        }
Example #14
0
        public void TestMethod()
        {
            var     t = new TestWrapper();
            dynamic w = new DynamicProxy(t);

            string r = w.Name;

            Assert.Equal("Test", r);

            r = w.Internal;
            Assert.Equal("InternalTest", r);

            r = w.Private;
            Assert.Equal("PrivateTest", r);

            r = w.EchoPublic("Tester");
            Assert.Equal("Public: Tester", r);

            r = w.EchoPrivate("Tester");
            Assert.Equal("Private: Tester", r);

            r = w.EchoInternal("Tester");
            Assert.Equal("Internal: Tester", r);

            r = w.EchoInternal(null);
            Assert.Equal("Internal: ", r);
        }
Example #15
0
        /// <summary>
        /// Executes the future queries.
        /// </summary>
        /// <param name="context">The <see cref="ObjectContext"/> to run the queries against.</param>
        /// <param name="futureQueries">The future queries list.</param>
        public void ExecuteFutureQueries(ObjectContext context, IList <IFutureQuery> futureQueries)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (futureQueries == null)
            {
                throw new ArgumentNullException("futureQueries");
            }

            // used to call internal methods
            dynamic contextProxy = new DynamicProxy(context);

            contextProxy.EnsureConnection(false);

            try
            {
                using (var command = CreateFutureCommand(context, futureQueries))
                    using (var reader = command.ExecuteReader())
                    {
                        foreach (var futureQuery in futureQueries)
                        {
                            futureQuery.SetResult(context, reader);
                            reader.NextResult();
                        }
                    }
            }
            finally
            {
                contextProxy.ReleaseConnection();
                // once all queries processed, clear from queue
                futureQueries.Clear();
            }
        }
Example #16
0
        /// <summary>
        /// Creates an ObjectQuery from an expression.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="expression">The expression.</param>
        /// <param name="type">The type.</param>
        /// <returns>An ObjectQuery created from the expression.</returns>
        public static ObjectQuery CreateQuery(this IQueryable source, Expression expression, Type type)
        {
            // first convet to object query to get the correct provider
            ObjectQuery sourceQuery = source.ToObjectQuery();

            if (sourceQuery == null)
            {
                return(null);
            }

            IQueryProvider provider = ((IQueryable)sourceQuery).Provider;

            // create query from expression using internal ObjectQueryProvider
            dynamic    providerProxy   = new DynamicProxy(provider);
            IQueryable expressionQuery = providerProxy.CreateQuery(expression, type);

            if (expressionQuery == null)
            {
                return(null);
            }

            // convert back to ObjectQuery
            ObjectQuery resultQuery = expressionQuery.ToObjectQuery();

            return(resultQuery);
        }
        public void AsyncCallbackTest()
        {
            bool          isCallbackDone = false;
            AsyncCallback callback       = ar => isCallbackDone = true;

            var pendingCall = new PendingCall(0, "", "", callback, this);

            pendingCall.ReceiveResult(
                new RpcMessage.Result {
                CallResult = new RpcMessage.Parameter {
                    IntParam = 42
                }
            });

            client.Setup(c =>
                         c.Call(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object[]>(), It.IsAny <AsyncCallback>(),
                                It.IsAny <object>())).Returns(pendingCall);

            dynamic      serviceProxy = new DynamicProxy(client.Object, "TestServiceName");
            IAsyncResult asyncResult  = serviceProxy.BeginTestMethod("param", 42.0f, callback, this);

            Assert.That(asyncResult.AsyncState, Is.EqualTo(this));
            asyncResult.AsyncWaitHandle.WaitOne(); //not necessary, just because i can
            int result = serviceProxy.EndTestMethod(asyncResult);

            Assert.That(isCallbackDone);
            Assert.That(asyncResult.IsCompleted);
            Assert.That(result, Is.EqualTo(42));
            client.Verify(c => c.Call("TestServiceName", "TestMethod", new object[] { "param", 42.0f }, callback, this));
        }
Example #18
0
        public TEntity Create(TEntity entity)
        {
            Dictionary <string, object> modifiedProperties;

            if (DynamicProxy.IsProxy(entity.GetType()))
            {
                modifiedProperties = DynamicProxy.GetModifiedProperties(entity);
            }
            else
            {
                modifiedProperties = this._entityMapper.GetPropertyValues(entity);
            }
            List <string>           values = new List <string>();
            List <string>           list2  = new List <string>();
            List <IDbDataParameter> list3  = new List <IDbDataParameter>();

            foreach (PropertyInfo info in this._properties)
            {
                if (this._autoIncrementProperty != info)
                {
                    values.Add("[" + info.Name + "]");
                    list2.Add("@" + info.Name);
                    IDbDataParameter item = this._helper.CreateParameter(Xinchen.DbEntity.DbHelper.TypeMapper[info.PropertyType], "@" + info.Name, DBNull.Value);
                    if (modifiedProperties.ContainsKey(info.Name))
                    {
                        item.Value = modifiedProperties[info.Name];
                    }
                    if (this._keyProperty == info)
                    {
                        int result = 0;
                        if (int.TryParse(Convert.ToString(item.Value), out result) && (result <= 0))
                        {
                            throw new EntityException("检测到主键值为" + result.ToString() + ",是否忘记给主键赋值?实体名:" + this._entityType.Name);
                        }
                    }
                    if (item.Value == null)
                    {
                        item.Value = DBNull.Value;
                    }
                    list3.Add(item);
                }
            }
            string sql = string.Format("insert into {0} ({1}) values({2});", "[" + this.TableName + "]", string.Join(",", values), string.Join(",", list2));

            if (this._autoIncrementProperty != null && DbHelper.ProviderName != "System.Data.OleDb")
            {
                sql = sql + "SELECT @@IDENTITY;";
                int num2 = this._helper.ExecuteScalarCount(sql, list3.ToArray());
                if (this._autoIncrementProperty != null)
                {
                    this._entityMapper.SetValue(entity, this._autoIncrementProperty.Name, num2);
                }
            }
            else
            {
                this._helper.ExecuteUpdate(sql, list3.ToArray());
            }
            return(DynamicProxy.CreateDynamicProxy <TEntity>(entity));
        }
 /// <summary>
 /// Returns an instatiable class that implements the given interface class
 /// </summary>
 [CanBeNull] public Type WrapperTypeFor(Type t)
 {
     if (t == null)
     {
         return(null);
     }
     return((t.IsInterface) ? (DynamicProxy.GetInstanceFor(t)?.GetType()) : (t));
 }
Example #20
0
        public static T GetServiceReference <T>(string serviceName, string nsHost = DefaultHostname, int nsPort = DefaultPort) where T : IToyOrbService
        {
            var lookupRequest  = new NameLookupMessage(serviceName);
            var lookupResponse = new Requestor <NameLookupMessage, NameResponseMessage>(nsHost, nsPort).MakeRequest(lookupRequest);
            var remoteProxy    = new ClientSideProxy(lookupResponse.TypeName, lookupResponse.Host, lookupResponse.Port);

            return(DynamicProxy.NewProxyInstance <T>(remoteProxy));
        }
        public void DynamicConversionTest()
        {
            var obj1 = new ErrorProneAbstracted();
            dynamic proxy1 = new DynamicProxy(obj1, true);

            ErrorProneAbstracted abst = proxy1;
            Assert.IsNotNull(abst);
        }
        public void CallWithResultTest()
        {
            dynamic serviceProxy = new DynamicProxy(client.Object, "TestServiceName");
            int     result       = serviceProxy.TestMethod(10, "Hello", 1.0f);

            Assert.That(result, Is.EqualTo(42));
            client.Verify(c => c.Call("TestServiceName", "TestMethod", new object[] { 10, "Hello", 1.0f }, null, null));
        }
Example #23
0
 public T GetService <T>()
 {
     if (typeof(T).GetInterfaces().Any(x => x == typeof(IProcedure)))
     {
         return(DynamicProxy.BuildProxy <T>(typeof(T)));
     }
     return(default(T));//DI
 }
 public void DynamicProxyFieldAccessTest()
 {
     dynamic dp = new DynamicProxy(new DynamicTestData());
     dp.data = "12";
     dp.Id = 12;
     Console.WriteLine(dp.Id);
     dp.WriteDataValue();
 }
        public void CallTest()
        {
            dynamic serviceProxy = new DynamicProxy(client.Object, "TestServiceName");

            serviceProxy.TestMethod(10, "Hello", 1.0f);

            client.Verify(c => c.Call("TestServiceName", "TestMethod", new object[] { 10, "Hello", 1.0f }, null, null));
        }
Example #26
0
        public void DeleteBy(Action <TEntity> where)
        {
            TEntity local = (TEntity)Activator.CreateInstance(DynamicProxy.CreateDynamicProxyType <TEntity>());

            where (local);
            Dictionary <string, object> modifiedProperties = DynamicProxy.GetModifiedProperties(local);

            this.DeleteBy(modifiedProperties);
        }
Example #27
0
        public void Test1()
        {
            IAnimal      animal       = null;
            DynamicProxy dynamicProxy = new DynamicProxy(typeof(Cicada));

            // animal = (Animal)(dynamicProxy.GetTransparentProxy()) ;
            animal.Eating();
            Assert.Pass();
        }
Example #28
0
        private static EntityMap CreateEntityMap <TEntity>(ObjectQuery query)
        {
            Type          entityType    = typeof(TEntity);
            ObjectContext objectContext = query.Context;

            var modelSet = objectContext.GetEntitySet <TEntity>();

            if (modelSet == null)
            {
                return(null);
            }

            var entityMap = new EntityMap(entityType);

            entityMap.ModelSet  = modelSet;
            entityMap.ModelType = entityMap.ModelSet.ElementType;

            var metadata = objectContext.MetadataWorkspace;

            // force metadata to load
            dynamic dbProxy = new DynamicProxy(objectContext);

            dbProxy.EnsureMetadata();

            ItemCollection itemCollection;

            if (!metadata.TryGetItemCollection(DataSpace.CSSpace, out itemCollection))
            {
                // force CSSpace to load
                query.ToTraceString();

                // try again
                metadata.TryGetItemCollection(DataSpace.CSSpace, out itemCollection);
            }

            if (itemCollection == null)
            {
                return(null);
            }

            dynamic mappingFragmentProxy = FindMappingFragment(itemCollection, entityMap.ModelSet);

            if (mappingFragmentProxy == null)
            {
                return(null);
            }

            // SModel
            entityMap.StoreSet  = mappingFragmentProxy.TableSet;
            entityMap.StoreType = entityMap.StoreSet.ElementType;

            SetProperties(entityMap, mappingFragmentProxy);
            SetKeys(entityMap);
            SetTableName(entityMap);

            return(entityMap);
        }
 public void DynamicProxyExceptionIntercepterTest()
 {
     dynamic dp = new DynamicProxy(new ErrorProneClass());
     dp.data = "12";
     dp.Id = 12;
     Console.WriteLine(dp.Id);
     dp.DoStuff();
     dp.DoStuff();
     dp.WriteDataParams(1, "1");
 }
Example #30
0
        public TEntity GetSingle(Action <TEntity> condition)
        {
            TEntity local = (TEntity)Activator.CreateInstance(DynamicProxy.CreateDynamicProxyType <TEntity>());

            condition(local);
            List <IDbDataParameter> dbParameters = new List <IDbDataParameter>();
            string strWhere = this.ParseConditionFromProxyEntity(local, dbParameters);

            return(GetList(string.Join(",", this._propertyNames), strWhere, null, dbParameters.ToArray()).FirstOrDefault());
        }
Example #31
0
        public IList <TEntity> GetList(Action <TEntity> where)
        {
            TEntity local = (TEntity)Activator.CreateInstance(DynamicProxy.CreateDynamicProxyType <TEntity>());

            where (local);
            List <IDbDataParameter> dbParameters = new List <IDbDataParameter>();
            string strWhere = this.ParseConditionFromProxyEntity(local, dbParameters);

            return(this.GetList(string.Join(",", this._propertyNames), strWhere, null, dbParameters.ToArray()));
        }
Example #32
0
        public void TestMethod4()
        {//未添加 virual
            IGamePlayer player = DynamicProxy <GamePlayerB> .NewProxyInstance(new InvocationHandler());

            player.Upgrade();
            player.KillBoss();
            //Debug Trace:
            //B: 升级
            //B:杀怪
        }
Example #33
0
        private static void SendSampleMessage()
        {
            var senderNode = ObjectFactory.GetInstance <ISenderNode>();

            var sampleMessage = DynamicProxy.GetInstanceFor <ISampleMessage>();

            sampleMessage.Text = "sample message";

            senderNode.SendMessage(sampleMessage);
        }
Example #34
0
        public void CallResultMissingFailedTest()
        {
            var pendingCall = new PendingCall(0, "", "", null, null);
            pendingCall.ReceiveResult(new RpcMessage.Result());

            client.Setup(c =>
                c.Call(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object[]>(), It.IsAny<AsyncCallback>(),
                    It.IsAny<object>())).Returns(pendingCall);

            dynamic serviceProxy = new DynamicProxy(client.Object, "TestServiceName");
            int x = serviceProxy.TestMethod(10, "Hello", 1.0f);
        }
Example #35
0
        public void DynamicProxy_Should_Map_Instance_Method_Calls_To_The_Given_Instance()
        {
            const string instance = "TestString";
            dynamic proxy = new DynamicProxy(instance);

            char[] toCharArrayResult = proxy.ToCharArray();
            char[] toCharArrayIndexResult = proxy.ToCharArray(0, 4);

            var copyResult = new char[9];
            proxy.CopyTo(0, copyResult, 0, 9);

            Assert.AreEqual(instance, new string(toCharArrayResult));
            Assert.AreEqual(new string(instance.ToCharArray(0, 4)), new string(toCharArrayIndexResult));
            Assert.AreEqual(instance.Substring(0, 9), new string(copyResult));
        }
Example #36
0
        public void DynamicProxy_Should_Get_Indexed_Elements_For_IDictionary_Types()
        {
            var dictionary = new Dictionary<string, int>(1)
                                 {
                                     {"One", 1}
                                 };
            dynamic proxy = new DynamicProxy(dictionary);
            Assert.AreEqual(1, proxy["One"]);

            var hash = new Hashtable
                           {
                               {"Two", 2}
                           };
            proxy = new DynamicProxy(hash);
            Assert.AreEqual(2, proxy["Two"]);
        }
 public void DynamicProxyCastOperationTest()
 {
     if (System.Threading.Interlocked.CompareExchange(ref this.disposed, 1, -1) == -1)
     {
         var real = new ErrorProneAbstracted();
         dynamic proxy = new DynamicProxy(real);
         IDoWork interf = proxy;
         if (interf != null)
         {
             interf.DoWork();
             Assert.IsTrue(interf.Default == 0);
             interf.Default = 65;
             interf.DoWorkErrored(12);
         }
     }
 }
Example #38
0
        public void DynamicProxy_Should_Get_Indexed_Elements_For_Array_Types()
        {
            dynamic proxy = new DynamicProxy(new[] { "One", "Two" });

            Assert.AreEqual("One", proxy[0]);
            Assert.AreEqual("Two", proxy[1]);

            var multiArray = new string[2, 2];
            multiArray[0, 0] = "Three";
            multiArray[0, 1] = "Four";
            multiArray[1, 0] = "Five";
            proxy = new DynamicProxy(multiArray);

            Assert.AreEqual("Three", proxy[0, 0]);
            Assert.AreEqual("Four", proxy[0, 1]);
            Assert.AreEqual("Five", proxy[1, 0]);
            Assert.IsNull(proxy[1, 1]);
        }
Example #39
0
        public void DynamicProxy_Should_Map_Members_To_Given_Instance_When_Instance_Is_A_Dynamic_Type()
        {
            var dummy = new DummyClass("String Value");
            dynamic proxy = new DynamicProxy(new DynamicProxy(new DynamicProxy(new DynamicProxy(dummy))));

            const string things = "things";
            dummy.WritableProperty = things;
            proxy.WritableProperty = things;

            Assert.AreEqual(dummy.WritableProperty, proxy.WritableProperty);

            Assert.AreEqual(dummy.ReadOnlyProperty, proxy.ReadOnlyProperty);
            Assert.AreEqual(dummy.ReadOnlyProperty.Length, proxy.ReadOnlyProperty.Length);
            Assert.IsTrue(proxy.Equals(dummy));

            Assert.AreEqual(dummy.GetInt(12), proxy.GetInt(12));

            Assert.AreEqual(dummy[1, 2], proxy[1, 2]);
        }
Example #40
0
        public void AsyncCallbackTest()
        {
            bool isCallbackDone = false;
            AsyncCallback callback = ar => isCallbackDone = true;

            var pendingCall = new PendingCall(0, "", "", callback, this);
            pendingCall.ReceiveResult(
                new RpcMessage.Result { CallResult = new RpcMessage.Parameter { IntParam = 42 } });

            client.Setup(c =>
                c.Call(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object[]>(), It.IsAny<AsyncCallback>(),
                    It.IsAny<object>())).Returns(pendingCall);

            dynamic serviceProxy = new DynamicProxy(client.Object, "TestServiceName");
            IAsyncResult asyncResult = serviceProxy.BeginTestMethod("param", 42.0f, callback, this);
            Assert.That(asyncResult.AsyncState, Is.EqualTo(this));
            asyncResult.AsyncWaitHandle.WaitOne(); //not necessary, just because i can
            int result = serviceProxy.EndTestMethod(asyncResult);

            Assert.That(isCallbackDone);
            Assert.That(asyncResult.IsCompleted);
            Assert.That(result, Is.EqualTo(42));
            client.Verify(c => c.Call("TestServiceName", "TestMethod", new object[] { "param", 42.0f }, callback, this));
        }
        public void FastPropertyTest()
        {
            var real = new ErrorProneAbstracted();
            dynamic proxy = new DynamicProxy(real);

            Assert.IsTrue(proxy.Default == 0);
            proxy.Default = 23;
            Assert.IsTrue(proxy.Default == 23);

            Assert.IsTrue(TypePropertyMapper.Instance.Get(real.GetType(), "Default") != null);
        }
        public void DynamicProxyPropertyPerformanceSingleTest()
        {
            var holder1 = new PropertyHolder();
            var holder2 = new PropertyHolder();
            dynamic proxy = new DynamicProxy(holder1);
            dynamic proxy2 = new DynamicProxy(holder2, false);

            Stopwatch sw = new Stopwatch();
            sw.Start();
            proxy.Id = 12;
            proxy.Name = "Test";
            proxy.Old = true;
            sw.Stop();
            long ticksFast = sw.ElapsedTicks;
            sw.Reset();
            sw.Start();
            proxy2.Id = 12;
            proxy2.Name = "Test";
            proxy2.Old = true;
            sw.Stop();
            long ticksReflection = sw.ElapsedTicks;

            Debug.WriteLine((ticksFast / ticksReflection));
            Assert.IsTrue(ticksFast > ticksReflection);
        }
        public void DynamicProxyPropertyPerformanceMultipleTest()
        {
            var holder1 = new PropertyHolder();
            var holder2 = new PropertyHolder();
            dynamic proxy = new DynamicProxy(holder1);
            dynamic proxy2 = new DynamicProxy(holder2, false);
            int iterCount = 10000;

            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 1; i <= iterCount; i++)
            {
                proxy.Id = i;
                proxy.Name = "Test";
                proxy.Old = true;
            }
            sw.Stop();
            long ticksFast = sw.ElapsedTicks;
            sw.Reset();
            sw.Start();
            for (int i = 1; i <= iterCount; i++)
            {
                proxy2.Id = i;
                proxy2.Name = "Test";
                proxy2.Old = true;
            }
            sw.Stop();
            long ticksReflection = sw.ElapsedTicks;

            Debug.WriteLine((ticksReflection / ticksFast));
            Assert.IsTrue(ticksFast < ticksReflection);
        }
Example #44
0
        public void DynamicProxy_Should_Set_Indexed_Elements_For_IDictionary_Types()
        {
            var dictionary = new Dictionary<string, int>(1)
                                 {
                                     {"One", 1}
                                 };
            dynamic proxy = new DynamicProxy(dictionary);

            Assert.AreEqual(1, proxy["One"]);
            proxy["One"] = 2;
            Assert.AreEqual(2, proxy["One"]);
        }
Example #45
0
        public void DynamicProxy_Should_Set_Indexed_Elements_For_Array_Types()
        {
            dynamic proxy = new DynamicProxy(new[] { "One", "Two" });

            Assert.AreEqual("One", proxy[0]);
            proxy[0] = "Three";
            Assert.AreEqual("Three", proxy[0]);
        }
Example #46
0
        public void CallWithResultTest()
        {
            dynamic serviceProxy = new DynamicProxy(client.Object, "TestServiceName");
            int result = serviceProxy.TestMethod(10, "Hello", 1.0f);

            Assert.That(result, Is.EqualTo(42));
            client.Verify(c => c.Call("TestServiceName", "TestMethod", new object[] { 10, "Hello", 1.0f }, null, null));
        }
Example #47
0
        public void DynamicProxy_Should_Throw_RuntimeBinderException_When_Property_Is_Not_Writable()
        {
            dynamic proxy = new DynamicProxy(new DummyClass(""));

            proxy.ReadOnlyProperty = "";
        }
        public void TestMethodThrowError()
        {
            var real = new ErrorProneForProxy();
            dynamic proxy = new DynamicProxy(real);
            int data = proxy.DoWorkNonError(15);
            Assert.IsTrue(data == 20);

            proxy.DefaultData = 15;
            data = proxy.DoWorkNonError(15);
            Assert.IsTrue(data == 30);

            data = proxy.DoWorkReturnError(15);
            Assert.IsTrue(data == 20);
        }
        public void MethodCallingPerformance()
        {
            int iter = 5000;
            var obj1 = new ErrorProneAbstracted();
            var obj2 = new ErrorProneAbstracted();
            dynamic proxy1 = new DynamicProxy(obj1, true);
            dynamic proxy2 = new DynamicProxy(obj2, true, true);
            int result = 1;
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < iter; i++)
            {
                proxy1.DoWork();
                result = proxy1.DoWork2(12);
                result = proxy1.DoWork3(12, 123);
            }
            sw.Stop();
            long tick1 = sw.ElapsedMilliseconds;
            sw.Reset();

            sw.Start();
            for (int i = 0; i < iter; i++)
            {
                proxy2.DoWork();
                result = proxy2.DoWork2(12);
                result = proxy2.DoWork3(12, 123);
            }
            sw.Stop();
            long tick2 = sw.ElapsedMilliseconds;

            Debug.WriteLine("{0} - {1} Diff: {2}", tick1, tick2, tick1 - tick2);
            Assert.IsTrue(tick1 > tick2);
        }
Example #50
0
        public void DynamicProxy_Should_Return_An_Object_Implementing_The_Requested_Interfaces_Properties()
        {
            dynamic proxy = new DynamicProxy(new DummyClass("NewString"));
            IDummyProperties iDummy = proxy;

            const string written = "Written";

            Assert.AreEqual("NewString", iDummy.ReadOnlyProperty);

            iDummy.WritableProperty = written;
            Assert.AreEqual(written, iDummy.WritableProperty);

            iDummy.ValueProperty = 3;
            Assert.AreEqual(3, iDummy.ValueProperty);
        }
 public void DynamicProxyErrorTest()
 {
     dynamic dp = new DynamicProxy(new DynamicTestData());
     dp.DoNonExistentMethod();
 }
Example #52
0
 public void DynamicProxy_Should_Throw_An_Exception_For_Casts_If_The_Conversion_Is_Not_Possible_Because_Events_Do_Not_Match()
 {
     dynamic proxy = new DynamicProxy(new DummyClass2());
     IDummyEvents iDummy = proxy;
 }
        public void TestMethodDoNotThrowError()
        {
            var real = new ErrorProneForProxy();
            dynamic proxy = new DynamicProxy(real);
            int data = proxy.DoWorkNonError(15);
            Assert.IsTrue(data == 20);

            proxy.DefaultData = 15;
            data = proxy.DoWorkNonError(15);
            Assert.IsTrue(data == 30);

            data = -1;
            data = proxy.DoWorkErrorNoThrow(15);
            //Since method above in case on error will eat exception
            //it must return default value as a result
            Assert.IsTrue(data == 0);
        }
        public void DynamicProxyMapperTest()
        {
            dynamic dp = new DynamicProxy(new DynamicTestData());
            dp.DoStuff();

            dynamic dp2 = new DynamicProxy(new DynamicTestData());
            dp2.DoStuff();
        }
Example #55
0
        public void DynamicProxy_Should_Throw_An_Exception_For_Casts_If_The_Conversion_Is_Not_Possible_Because_Methods_Do_Not_Match()
        {
            dynamic proxy = new DynamicProxy("");
            IDisposable iDisposable = proxy;

            iDisposable.Dispose();
        }
Example #56
0
 public void DynamicProxy_Should_Throw_An_Exception_For_Casts_If_The_Conversion_Is_Not_Possible_Because_Properties_Do_Not_Match()
 {
     dynamic proxy = new DynamicProxy("");
     IDummyProperties iDummy = proxy;
 }
Example #57
0
 public void CallResultTypeFailedTest()
 {
     dynamic serviceProxy = new DynamicProxy(client.Object, "TestServiceName");
     MultiplyOutput result = serviceProxy.TestMethod(10, "Hello", 1.0f);
 }
Example #58
0
        public void CallTest()
        {
            dynamic serviceProxy = new DynamicProxy(client.Object, "TestServiceName");
            serviceProxy.TestMethod(10, "Hello", 1.0f);

            client.Verify(c => c.Call("TestServiceName", "TestMethod", new object[] { 10, "Hello", 1.0f }, null, null));
        }
 public void DynamicProxyTest()
 {
     dynamic dp = new DynamicProxy(new DynamicTestData());
     dp.DoStuff();
 }
Example #60
0
        public void DynamicProxy_Should_Return_An_Object_Implementing_The_Requested_Interfaces_Methods()
        {
            dynamic proxy = new DynamicProxy(new DummyClass("NewString"));
            IDummyMethods iDummy = proxy;

            Assert.AreEqual("1 - 2", iDummy.GetStringValue(1, 2));
            Assert.AreEqual(12, iDummy.GetInt(12));

            iDummy.Statement();
        }