protected LeoValidationStrategy(Type type) { SourceType = type ?? throw new ArgumentNullException(nameof(type)); _memberValueRuleBuilders = new List <CorrectValueRuleBuilder>(); _handler = new MemberHandler(PrecisionDictOperator.CreateFromType(SourceType), SourceType); }
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); }
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"); } }
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"]); }
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")); }
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"]); }
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."); } }
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"]); }
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); }
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(); }