Beispiel #1
0
        static void Main(string[] args)
        {
            var da = AppDomain.CurrentDomain.DefineDynamicAssembly(
                new AssemblyName("dyn"), // call it whatever you want
                AssemblyBuilderAccess.Save);

            var dm = da.DefineDynamicModule("dyn_mod", "dyn.dll");
            var dt = dm.DefineType("dyn_type");


            var type = typeof(KeyValuePair <string, string>);
            var pi   = type.GetProperty("Key");

            var lambdaValueType = PropertyInvoker.GetExpressionLambda <KeyValuePair <string, string> >(pi);

            lambdaValueType.CompileToMethod(dt.DefineMethod("KVP", MethodAttributes.Public | MethodAttributes.Static));

            var lambdaRefType = PropertyInvoker.GetExpressionLambda <TRef>(typeof(TRef).GetProperty("PropRef"));

            lambdaRefType.CompileToMethod(dt.DefineMethod("TRef_PropRef", MethodAttributes.Public | MethodAttributes.Static));

            var lambdaRefType2 = PropertyInvoker.GetExpressionLambda <IncludeExclude>(typeof(IncludeExclude).GetProperty("Id"));

            lambdaRefType2.CompileToMethod(dt.DefineMethod("IncludeExclude_Id", MethodAttributes.Public | MethodAttributes.Static));


            dt.CreateType();
            da.Save("dyn.dll");
        }
Beispiel #2
0
 public override SetMemberDelegate CreateSetter(PropertyInfo propertyInfo)
 {
     return
         (E.Common.PclExport.Instance.SupportsEmit
             ? PropertyInvoker.SetEmit(propertyInfo)
             : E.Common.PclExport.Instance.SupportsExpression
                 ? PropertyInvoker.SetExpression(propertyInfo)
                 : base.CreateSetter(propertyInfo));
 }
Beispiel #3
0
 public override GetMemberDelegate <T> CreateGetter <T>(PropertyInfo propertyInfo)
 {
     return
         (E.Common.PclExport.Instance.SupportsEmit
             ? PropertyInvoker.GetEmit <T>(propertyInfo)
             : E.Common.PclExport.Instance.SupportsExpression
                 ? PropertyInvoker.GetExpression <T>(propertyInfo)
                 : base.CreateGetter <T>(propertyInfo));
 }