示例#1
0
        protected LeoValidationStrategy(Type type)
        {
            SourceType = type ?? throw new ArgumentNullException(nameof(type));

            _memberValueRuleBuilders = new List <CorrectValueRuleBuilder>();
            _handler = new MemberHandler(PrecisionDictOperator.CreateFromType(SourceType), SourceType);
        }
示例#2
0
        public unsafe void TestCall6()
        {
            //创建动态类实例代理
            var instance = PrecisionDictOperator <TestB> .Create();

            instance.New();
            Assert.Equal("111", (string)instance["Name"]);

            //调用动态委托赋值
            instance.Set("Name", "222");

            Assert.Equal("222", (string)instance["Name"]);


            var c = (TestC)instance["InstanceC"];

            Assert.Equal("abc", c.Name);


            instance["InstanceC"] = (new TestC()
            {
                Name = "bbca"
            });
            Assert.Equal("bbca", ((TestC)instance["InstanceC"]).Name);
        }
示例#3
0
文件: TestCaller.cs 项目: wwwK/Leo
 public TestCaller()
 {
     NatashaInitializer.InitializeAndPreheating();
     string temp = "Hello";
     Dict = new Dictionary<string, Action<CallModel, object>>();
     Type type = typeof(CallModel);
     PrecisionDict = PrecisionDictOperator.CreateFromType(type);
     FuzzyDict = FuzzyDictOperator.CreateFromType(type);
     HashDict = HashDictOperator.CreateFromType(type);
     //LinkHandler = LinkOperator.CreateFromType(type);
     //FuzzyLinkHandler = FuzzyLinkOperator.CreateFromType(type);
     //HashLinkHandler = HashLinkOperator.CreateFromType(type);
     Model = new CallModel();
     Dynamic = new CallModel();
     DictModel = new CallModel();
     PrecisionDict.New();
     FuzzyDict.New();
     HashDict.New();
     Dict["Name"] = NDelegate.DefaultDomain().Action<CallModel, object>("arg1.Name=(string)arg2;");
     for (int i = 0; i < 3000; i++)
     {
         Model.Name = "Hello";
         Dynamic.Name = "Hello";
         Dict["Name"](DictModel, "Hello");
         PrecisionDict.Set("Name", "Hello");
     }
 }
示例#4
0
        public unsafe void TestCall5()
        {
            //创建动态类实例代理
            var instance = PrecisionDictOperator <TestB> .Create();

            instance.New();
            Assert.Equal("111", (string)instance["Name"]);

            //调用动态委托赋值
            instance.Set("Name", "222");

            Assert.Equal("222", (string)instance["Name"]);
        }
示例#5
0
        public void DynamicObjTest()
        {
            dynamic sampleObject = new ExpandoObject();

            sampleObject.Name = "Nu";
            sampleObject.Age  = 12;

            var v = PrecisionDictOperator.CreateFromType(typeof(ExpandoObject));

            v.SetObjInstance(sampleObject);

            Assert.Equal("Nu", v["Name"]);
            Assert.Equal(12, v.Get <int>("Age"));
        }
示例#6
0
        public void TestCall3()
        {
            //创建动态类实例代理
            var instance = PrecisionDictOperator.CreateFromType(typeof(FakeStaticTestModel2));

            FakeStaticTestModel2.Name = "111";
            Assert.Equal("111", (string)instance["Name"]);
            instance["Name"] = "222";
            Assert.Equal("222", (string)instance["Name"]);
            Assert.Equal("222", instance.Get <string>("Name"));
            FakeStaticTestModel2.Age = 1001;
            Assert.Equal(1001, (int)instance["Age"]);
            FakeStaticTestModel2.Temp = DateTime.Now;
            instance["Temp"]          = FakeStaticTestModel2.Temp;
            Assert.Equal(FakeStaticTestModel2.Temp, (DateTime)instance["Temp"]);
        }
示例#7
0
        public static Func <DictBase> Switch <T>(AlgorithmKind kind)
        {
            switch (kind)
            {
            case AlgorithmKind.Precision:
                return(() => PrecisionDictOperator <T> .Create());

            case AlgorithmKind.Hash:
                return(() => HashDictOperator <T> .Create());

            case AlgorithmKind.Fuzzy:
                return(() => FuzzyDictOperator <T> .Create());

            default:
                throw new InvalidOperationException("Unknown AlgorithmKind.");
            }
        }
示例#8
0
        public void TestCall4()
        {
            //ScriptComplier.Init();
            string text = @"using System;
using System.Collections;
using System.Linq;
using System.Text;
 
namespace HelloWorld
{
    public class Test
    {
        public Test(){
            Name=""111"";
            Pp = 10;
            Rp=""aa"";
        }
        private long Pp;
        private readonly string Rp;
        public string Name;
        public int Age{get;set;}
    }
}";
            //根据脚本创建动态类
            var oop = new AssemblyCSharpBuilder();

            oop.Add(text);
            Type type = oop.GetTypeFromShortName("Test");
            //创建动态类实例代理
            var instance = PrecisionDictOperator.CreateFromType(type);
            var obj      = Activator.CreateInstance(type);

            instance.SetObjInstance(obj);
            instance["Pp"] = 30L;
            instance["Rp"] = "ab";
            //Get动态调用
            Assert.Equal("111", (string)instance["Name"]);
            Assert.Equal("ab", (string)instance["Rp"]);
            Assert.Equal(30, (long)instance["Pp"]);
            //调用动态委托赋值
            instance.Set("Name", "222");

            Assert.Equal("222", (string)instance["Name"]);
        }
示例#9
0
        public void TestCall1()
        {
            //ScriptComplier.Init();
            string text = @"using System;
using System.Collections;
using System.Linq;
using System.Text;
 
namespace HelloWorld
{
    public static class StaticTest2
    {
        static StaticTest2(){
            Name=""111"";
        }

        public static string Name;
        public static int Age{get;set;}
    }
}";
            //根据脚本创建动态类
            var oop = new AssemblyCSharpBuilder();

            oop.Add(text);
            var type = oop.GetTypeFromShortName("StaticTest2");
            //创建动态类实例代理
            var instance = PrecisionDictOperator.CreateFromType(type);

            //Get动态调用
            Assert.Equal("111", (string)instance["Name"]);
            //调用动态委托赋值
            instance["Name"] = "222";

            Assert.Equal("222", (string)instance["Name"]);
            Assert.Equal("222", instance.Get <string>("Name"));
        }
        public unsafe void GenericMetadataTest()
        {
            var instance = PrecisionDictOperator <NiceAct> .Create();

            var members0 = instance.GetMembers();
            var members1 = instance.GetCanReadMembers();
            var members2 = instance.GetCanReadMembers();

            Assert.Equal(5, members0.Count());
            Assert.Equal(5, members1.Count());
            Assert.Equal(5, members2.Count());

            Assert.NotNull(instance.GetMember("Name"));
            Assert.NotNull(instance.GetMember("Age"));
            Assert.NotNull(instance.GetMember("Birthday"));
            Assert.NotNull(instance.GetMember("Country"));
            Assert.NotNull(instance.GetMember("IsValid"));

            Assert.Equal(typeof(string), instance.GetMember("Name").MemberType);
            Assert.Equal(typeof(int), instance.GetMember("Age").MemberType);
            Assert.Equal(typeof(DateTime), instance.GetMember("Birthday").MemberType);
            Assert.Equal(typeof(Country), instance.GetMember("Country").MemberType);
            Assert.Equal(typeof(bool), instance.GetMember("IsValid").MemberType);
        }
示例#11
0
文件: Program.cs 项目: wwwK/Leo
        static void Main(string[] args)
        {
            NatashaInitializer.InitializeAndPreheating();

            TempTime = DateTime.Now;
            Stopwatch stopwatch = new Stopwatch();

            for (int j = 0; j < 20; j++)
            {
                Console.WriteLine("=========================================");


                stopwatch.Restart();
                for (int i = 0; i < 40000; i++)
                {
                    var tEntity = new TestB();
                    if (tEntity.A2ge712 == "111")
                    {
                        //调用动态委托赋值
                        tEntity.A2ge712 = "222";
                    }
                }
                stopwatch.Stop();
                Console.WriteLine("原生调用:\t\t" + stopwatch.Elapsed);



                //var entity = LinkOperator.CreateFromType(typeof(TestB));
                //stopwatch.Restart();
                //for (int i = 0; i < 40000; i++)
                //{
                //    entity.New();
                //    if (entity.Get<string>("A2ge712") == "111")
                //    {
                //        //调用动态委托赋值
                //        entity.Set("A2ge712", "222");
                //    }
                //}
                //stopwatch.Stop();
                //Console.WriteLine("NCaller SimpleCaller:\t" + stopwatch.Elapsed);

                var dict = PrecisionDictOperator.CreateFromType(typeof(TestB));
                stopwatch.Restart();
                for (int i = 0; i < 40000; i++)
                {
                    dict.New();
                    if ((string)(dict["A2ge712"]) == "111")
                    {
                        //调用动态委托赋值
                        dict["A2ge712"] = "222";
                    }
                }
                stopwatch.Stop();
                Console.WriteLine("NCaller DictCaller:\t" + stopwatch.Elapsed);

                stopwatch.Restart();
                for (int i = 0; i < 40000; i++)
                {
                    RunDynamic(new TestB());
                }
                stopwatch.Stop();
                Console.WriteLine("Dynamic :\t\t" + stopwatch.Elapsed);


                //stopwatch.Restart();
                //for (int i = 0; i < 40000; i++)
                //{
                //    var tEntity = (new TestB()).LinkCaller();
                //    if (tEntity.Get<string>("A2ge712") == "111")
                //    {
                //        //调用动态委托赋值
                //        tEntity.Set("A2ge712", "222");
                //    }
                //}
                //stopwatch.Stop();
                //Console.WriteLine("NCaller Extension:\t" + stopwatch.Elapsed);


                //entity = DynamicCaller.Create(typeof(TestB));
                //stopwatch.Restart();
                //for (int i = 0; i < 40000; i++)
                //{
                //    entity.New();
                //    if (entity.Get<DateTime>("Time") != TempTime)
                //    {
                //        //调用动态委托赋值
                //        entity.Set("Time", TempTime);
                //    }
                //}
                //stopwatch.Stop();
                //Console.WriteLine("NCaller SimpleCaller:\t" + stopwatch.Elapsed);

                //stopwatch.Restart();
                //for (int i = 0; i < 40000; i++)
                //{
                //    RunDynamicTime(new TestB());
                //}
                //stopwatch.Stop();
                //Console.WriteLine("Dynamic :\t\t" + stopwatch.Elapsed);

                //entity = DynamicCaller.Create(typeof(TestB));
                //stopwatch.Restart();
                //for (int i = 0; i < 40000; i++)
                //{
                //    entity.New();
                //    if (entity.Get<DateTime>("Time") != TempTime)
                //    {
                //        //调用动态委托赋值
                //        entity.Set("Time", TempTime);
                //    }
                //}
                //stopwatch.Stop();
                //Console.WriteLine("NCaller SimpleCaller:\t" + stopwatch.Elapsed);
                Console.WriteLine("=========================================");
            }

            //var dict = DictOperator<TestB>.Create();
            //dict["Name"] = "Hello";
            //dict["Age"] = 100;
            //dict["Time"] = DateTime.Now;

            Console.ReadKey();
        }