コード例 #1
0
        public void CanRunCodeBeforeMethodExecution()
        {
            var options = new TypeToTypeWrapperOptions()
            {
                OnBeforeMethod = (wrapperOptions, type, inst, mi) =>
                {
                    if (mi.Name == "Run")
                    {
                        ((TestClass)inst).AddCount(6);
                    }
                }
            };

            var wrapper = new TypeToTypeWrapper();
            var result  = wrapper.CreateType(typeof(TestClass), options);

            dynamic instance = Activator.CreateInstance(result);

            instance.Run();
            instance.Run();

            var instanceCount = instance.GetCount();

            Assert.Equal(12, instanceCount);
        }
コード例 #2
0
        public void CanCreateSingleton()
        {
            var inst    = new TestClass();
            var options = new TypeToTypeWrapperOptions()
            {
                Factory = (wrapperOptions, type) => inst
            };

            var wrapper = new TypeToTypeWrapper();
            var result  = wrapper.CreateType(typeof(TestClass), options);

            dynamic instance  = Activator.CreateInstance(result);
            dynamic instance2 = Activator.CreateInstance(result);

            instance.AddCount();
            instance.AddCount();

            instance2.AddCount();
            instance2.AddCount();
            instance2.AddCount();

            var instanceCount = instance.GetCount();

            Assert.Equal(5, instanceCount);

            var instance2Count = instance2.GetCount();

            Assert.Equal(5, instance2Count);
        }
コード例 #3
0
        public void CanRunCodeOnConstructorUsingString()
        {
            var options = new TypeToTypeWrapperOptions()
            {
                OnConstructorCustomCodeGenerator = (wrapperOptions, type) => "_instance.AddCount(21);"
            };

            var wrapper = new TypeToTypeWrapper();
            var result  = wrapper.CreateType(typeof(TestClass), options);

            dynamic instance      = Activator.CreateInstance(result);
            var     instanceCount = instance.GetCount();

            Assert.Equal(21, instanceCount);
        }
コード例 #4
0
        public void CanIncludeSpecificMethodsWithMultipleWildCards()
        {
            var wrapper = new TypeToTypeWrapper();

            var options = new TypeToTypeWrapperOptions()
            {
                IncludedMethods = new List <string>()
                {
                    "*llo*", "Ru*"
                }
            };
            var result = wrapper.CreateType(typeof(TestClass), options);

            var allMethods = result.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);

            Assert.Equal(2, allMethods.Length);
        }
コード例 #5
0
        public void CanRunCodeOnConstructor()
        {
            var options = new TypeToTypeWrapperOptions()
            {
                OnConstructor = (wrapperOptions, type, inst) =>
                {
                    ((TestClass)inst).AddCount(15);
                }
            };

            var wrapper = new TypeToTypeWrapper();
            var result  = wrapper.CreateType(typeof(TestClass), options);

            dynamic instance      = Activator.CreateInstance(result);
            var     instanceCount = instance.GetCount();

            Assert.Equal(15, instanceCount);
        }
コード例 #6
0
        public void CanRenameMethod()
        {
            var wrapper = new TypeToTypeWrapper();

            var options = new TypeToTypeWrapperOptions()
            {
                IncludedMethods = new List <string>()
                {
                    "Run"
                }, MethodNameGenerator = (wrapperOptions, type, mInfo) => "CustomMethodName"
            };

            var result = wrapper.CreateType(typeof(TestClass), options);

            dynamic instance = Activator.CreateInstance(result);

            instance.CustomMethodName();
        }
コード例 #7
0
        public void CanIncludeSpecificMethodsWithWildCard()
        {
            var wrapper = new TypeToTypeWrapper();

            var options = new TypeToTypeWrapperOptions()
            {
                IncludedMethods = new List <string>()
                {
                    "Hello*"
                }
            };

            var originalType = typeof(TestClass);
            var result       = wrapper.CreateType(originalType, options);

            var allMethods = result.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);

            Assert.Single(allMethods);
        }
コード例 #8
0
        public void CanRunCodeAfterMethodExecutionUsingString()
        {
            var options = new TypeToTypeWrapperOptions()
            {
                OnAfterMethodCustomCodeGenerator = (wrapperOptions, type, mi) => "_instance.AddCount(18);"
            };

            var wrapper = new TypeToTypeWrapper();
            var result  = wrapper.CreateType(typeof(TestClass), options);

            dynamic instance = Activator.CreateInstance(result);

            instance.Run();
            instance.Run();

            var instanceCount = instance.GetCount();

            Assert.Equal(36, instanceCount);
        }
コード例 #9
0
        public void CanAddCustomCode()
        {
            var customCode = @"public void RunThings()
                       {
                           var y = 0;
                           var a = 1;
           
                           a = y + 10;
                       }";

            var options = new TypeToTypeWrapperOptions()
            {
                CustomCodeGenerator = (wrapperOptions, type) => customCode
            };

            var wrapper = new TypeToTypeWrapper();
            var result  = wrapper.CreateType(typeof(TestClass), options);

            dynamic instance = Activator.CreateInstance(result);

            instance.RunThings();
        }