首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏DotNet NB && CloudNative

    C#动态方法拦截(AOP)的5种解决方案!

    AssemblyBuilderAccess.Run); var moduleBuilder = assemblyBuilder.DefineDynamicModule("Proxy.dll"); var typeBuilder FoobarProxy", TypeAttributes.Public, null, new Type[] { typeof(IFoobar) }); var targetField = typeBuilder.DefineField MethodAttributes.NewSlot | MethodAttributes.Virtual | MethodAttributes.Final; var invokeMethod = typeBuilder.DefineMethod OpCodes.Callvirt, typeof(IFoobar).GetMethod("Invoke")); il.Emit(OpCodes.Ret); return typeBuilder.CreateType il.Emit(OpCodes.Call, typeof(Foobar).GetMethod("Invoke")); il.Emit(OpCodes.Ret); return typeBuilder.CreateType

    1.6K20编辑于 2023-09-19
  • 来自专栏码匠的流水账

    聊聊dubbo-go的AccessLogFilter

    todo(after the paramTypes were set to the invocation. we should change this implementation) typeBuilder strings.Builder{} ​ builder.WriteString(reflect.ValueOf(invocation.Arguments()[0]).String()) typeBuilder.WriteString builder.WriteString(",") builder.WriteString(reflect.ValueOf(arg).String()) ​ typeBuilder.WriteString (",") typeBuilder.WriteString(reflect.TypeOf(arg).Name()) } dataMap[Arguments ] = builder.String() dataMap[Types] = typeBuilder.String() } ​ return dataMap } buildAccessLogData

    40700发布于 2020-07-14
  • 来自专栏明志德到的IT笔记

    C# Emit动态生成代码

    ModuleBuilder modulebuilder = assemblyBuilder.DefineDynamicModule("MyModal"); //托管模块 TypeBuilder typebuilder = modulebuilder.DefineType("MyDynamicType", TypeAttributes.Public); Type type = typebuilder.CreateType(); Emit 定义字段、构造函数 // 在Type中生成公有字段 FieldBuilder fieldBuilder = typebuilder.DefineField("NumberField", typeof(int), FieldAttributes.Public); // 定义一个接受整数参数的构造函数 Type[] parameterTypes = { typeof(int) }; ConstructorBuilder ctor1 = typebuilder.DefineConstructor

    52810编辑于 2023-10-21
  • 来自专栏程序员的SOD蜜

    来一点反射和Emit,让ORM的使用极度简化

    我们用一点反射和一点Emit,来完成这个过程: 反射得到构造函数和属性定义: //得到类型生成器 TypeBuilder typeBuilder (targetType); //定义构造函数 BuildConstructor(typeBuilder, newTypeParent, targetType.Name MethodAttributes.Final; //构造Get访问器 MethodBuilder getPropMethodBuilder = typeBuilder.DefineMethod getPropMethodBuilder); //构造Set访问器 MethodBuilder setPropMethodBuilder = typeBuilder.DefineMethod SetFieldNamesBuilder, propertyNames.ToArray()); //真正创建,并返回 Type resuleType=typeBuilder.CreateType

    1.3K90发布于 2018-02-27
  • 来自专栏dotNET知音

    .NET高级特性-Emit(2)类的定义

    结尾,从下表中我们可以看的非常清楚 元素中文 元素名称 对应Emit构建器名称 程序集 Assembly AssemblyBuilder 模块 Module ModuleBuilder 类 Type TypeBuilder AssemblyBuilderAccess.Run); var moduleBuilder = assemblyBuilder.DefineDynamicModule("Edwin.Blog.Emit"); var typeBuilder (barType); //实现接口 typeBuilder.AddInterfaceImplementation(interfaceType.MakeGenericType(genericTypeBuilder ));   (6) 定义字段,因为字段在构造器值需要使用,故先创建 //定义字段 var fieldBuilder = typeBuilder.DefineField("_name", genericTypeBuilder , FieldAttributes.Private);   (7) 定义构造器,并编写内部逻辑 //定义构造器 var ctorBuilder = typeBuilder.DefineConstructor

    1.4K20发布于 2020-02-12
  • 来自专栏DotNet NB && CloudNative

    秒懂C#通过Emit动态生成代码

    构造一个类型构造器, // create type builder for a class var typeBuilder = moduleBuilder.DefineType("HelloKittyClass // create method builder var methodBuilder = typeBuilder.DefineMethod( "SayHelloMethod", MethodAttributes.Public throw it. il.Emit(OpCodes.Ret); 创建类型, // then create the whole class type var helloKittyClassType = typeBuilder.CreateType HelloKittyClass", TypeAttributes.Public); // create method builder var methodBuilder = typeBuilder.DefineMethod il.Emit(OpCodes.Ret); // then create the whole class type var helloKittyClassType = typeBuilder.CreateType

    48330编辑于 2023-10-30
  • 来自专栏IT民工的代码世界

    NetCore实现Transitional自定义注解事物

    typeBuilder; if (inheritMode) { typeBuilder = moduleBuilder.DefineType TypeAttributes.Public, null, new[] { InterfaceType }); } InjectInterceptor(typeBuilder , ImpType, InterceptType, inheritMode, isInterceptAllMethod); var t = typeBuilder.CreateType return Activator.CreateInstance(t); } private static void InjectInterceptor(TypeBuilder typeBuilder, Type ImpType, Type InterceptType, bool inheritMode, bool isInterceptAllMethod)

    46320编辑于 2023-07-19
  • 来自专栏码匠的流水账

    聊聊dubbo-go的AccessLogFilter

    todo(after the paramTypes were set to the invocation. we should change this implementation) typeBuilder strings.Builder{} builder.WriteString(reflect.ValueOf(invocation.Arguments()[0]).String()) typeBuilder.WriteString builder.WriteString(",") builder.WriteString(reflect.ValueOf(arg).String()) typeBuilder.WriteString (",") typeBuilder.WriteString(reflect.TypeOf(arg).Name()) } dataMap[Arguments ] = builder.String() dataMap[Types] = typeBuilder.String() } return dataMap } buildAccessLogData

    36120发布于 2020-07-16
  • 来自专栏IT民工的代码世界

    c#通过Emit方式实现动态代理

    typeBuilder = moduleBuilder.DefineType( nameOfType, TypeAttributes.Public, ImpType) ; 实现接口方式声明TypeBuilder typeBuilder = moduleBuilder.DefineType( nameOfType, TypeAttributes.Public 如果是继承方式,ImpType与InterfaceType类型一致,声明完这个类,接下来我们就需要对这个类的内容进行完善,先上代码 private static void InjectInterceptor(TypeBuilder typeBuilder, Type ImpType, Type InterceptType, bool inheritMode, bool isInterceptAllMethod) { // ---- 变量定义 ---- var constructorBuilder = typeBuilder.DefineConstructor(

    66220编辑于 2023-07-19
  • 来自专栏大内老A

    动态方法拦截(AOP)的N种解决方案

    AssemblyBuilderAccess.Run); var moduleBuilder = assemblyBuilder.DefineDynamicModule("Proxy.dll"); var typeBuilder FoobarProxy", TypeAttributes.Public, null, new Type[] { typeof(IFoobar) }); var targetField = typeBuilder.DefineField ", typeof(IFoobar), FieldAttributes.Private | FieldAttributes.InitOnly); var constructor = typeBuilder.DefineConstructor MethodAttributes.NewSlot | MethodAttributes.Virtual | MethodAttributes.Final; var invokeMethod = typeBuilder.DefineMethod OpCodes.Callvirt, typeof(IFoobar).GetMethod("Invoke")); il.Emit(OpCodes.Ret); return typeBuilder.CreateType

    97610发布于 2021-01-13
  • 来自专栏Android补给站

    自定义Android注解Part2:代码自动生成

    1//写入java文 2try { 3    JavaFile.builder(packageName, typeBuilder.build()).build().writeTo(mFiler) 4}   { 5    mMessager.printMessage(Diagnostic.Kind.ERROR, e.getMessage(), typeElement); 6} 代码中的JavaFile与typeBuilder packageName, 9        NameUtils.getAutoGeneratorTypeName(typeName)); 10 11//构建自动生成的类 12TypeSpec.Builder typeBuilder -> name, $T -> type(ClassName), $L -> literals 有了上面的理解我们再来看下面的生成代码: 1//构建自动生成的类 2TypeSpec.Builder typeBuilder 最后分别向bindView方法中添加findViewById与setText代码块,同时将定义的方法添加到typeBuilder中。

    79630发布于 2019-07-16
  • 来自专栏.NET开发那点事

    ClassDescription

    var moduleBuilder = assemblyBuilder.DefineDynamicModule(clazz.ModuleName); var typeBuilder var typee = item.Type; //define field var fieldBuilder = typeBuilder.DefineField PropertyAttributes.SpecialName, typee, Type.EmptyTypes); //define getter var getPropMthdBldr = typeBuilder.DefineMethod getIL.Emit(OpCodes.Ret); //define setter var setPropMthdBldr = typeBuilder.DefineMethod propBuilder.SetSetMethod(setPropMthdBldr); } //create type var type = typeBuilder.CreateType

    75120编辑于 2022-12-06
  • 来自专栏黑白天安全团队

    CS Powershell Beacon分析

    ModuleBuilder.DefineType:定义类型 往下看就是一个TypeBuilder.DefineConstructor 向动态类型添加一个新的构造函数。 https://docs.microsoft.com/en-us/dotnet/api/system.reflection.emit.typebuilder.definemethod? view=netcore-3.1#System_Reflection_Emit_TypeBuilder_DefineMethod_System_String_System_Reflection_MethodAttributes_System_Reflection_CallingConventions_System_Type_System_Type

    2K20发布于 2021-09-07
  • 来自专栏大内老A

    关于Expression Tree和IL Emit的所谓的"性能差别"

    assemblyBuilder.DefineDynamicModule("Artech.EmitVsExpression", "Artech.EmitVsExpression.dll"); 6: var typeBuilder methodBuilder); 13:  14: //SetPropertyValueViaExpression 15: methodBuilder = typeBuilder.DefineMethod CompileToMethod(methodBuilder); 20:  21: //GetPropertyValueViaEmit 22: methodBuilder = typeBuilder.DefineMethod ilGenerator.Emit(OpCodes.Ret); 27:  28: //SetPropertyValueViaEmit 29: methodBuilder = typeBuilder.DefineMethod OpCodes.Callvirt, property.GetSetMethod(), null); 34: ilGenerator.Emit(OpCodes.Ret); 35:  36: typeBuilder.CreateType

    1.1K60发布于 2018-02-08
  • 来自专栏跨界架构师

    Aop动态生成代理类时支持带参数构造函数

    if (_parameters == null || _parameters.Length == 0) 2 { 3 return typeBuilder MethodAttributes.SpecialName | MethodAttributes.RTSpecialName | MethodAttributes.Public; 11 var constructor = typeBuilder.DefineConstructor il.Emit(OpCodes.Call, baseConstructor); 23 il.Emit(OpCodes.Ret); 24 25 return typeBuilder

    1.7K20发布于 2018-09-10
  • 来自专栏Android补给站

    提高10倍开发效率?APT如何让Android开发变得更轻松

    NameUtils.getAutoGeneratorTypeName(typeName)); //构建自动生成的类 TypeSpec.Builder typeBuilder Modifier.PUBLIC) .addAnnotation(Keep.class); //添加构造方法 typeBuilder.addMethod bindView.value()[1]); } } typeBuilder.addMethod //写入java文件 try { JavaFile.builder(packageName, typeBuilder.build

    45610编辑于 2024-03-18
  • 来自专栏Kirito的技术分享

    打开orika的正确方式

    response = new Response<>(); response.setData("test generic"); Type<Response<String>> fromType = new TypeBuilder <Response<String>>() {}.build(); Type<ResponseDto<String>> toType = new TypeBuilder<ResponseDto<String person.setName("test generic"); response.setData(person); Type<Response<Person>> fromType = new TypeBuilder <Response<Person>>() {}.build(); Type<Response<PersonDto>> toType = new TypeBuilder<Response<PersonDto

    4.4K110发布于 2018-04-27
  • 来自专栏HACK学习

    干货 | 绕过AMSI实现免杀的研究和思路

    System.Reflection.Emit.AssemblyBuilderAccess]::Run) $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule('InMemoryModule', $false) $TypeBuilder Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate]) $ConstructorBuilder = $TypeBuilder.DefineConstructor $Parameters) $ConstructorBuilder.SetImplementationFlags('Runtime, Managed') $MethodBuilder = $TypeBuilder.DefineMethod $Parameters) $MethodBuilder.SetImplementationFlags('Runtime, Managed') Write-Output $TypeBuilder.CreateType

    1.3K30发布于 2021-11-12
  • 来自专栏HACK学习

    内网渗透 | 了解和防御Mimikatz抓取密码的原理

    System.Reflection.Emit.AssemblyBuilderAccess]::Run) $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule('InMemoryModule', $false) $TypeBuilder Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate]) $ConstructorBuilder = $TypeBuilder.DefineConstructor $Parameters) $ConstructorBuilder.SetImplementationFlags('Runtime, Managed') $MethodBuilder = $TypeBuilder.DefineMethod Virtual', $ReturnType, $Parameters) $MethodBuilder.SetImplementationFlags('Runtime, Managed') $TypeBuilder.CreateType

    8K10发布于 2021-06-24
  • 来自专栏元闰子的邀请

    【Go实现】实践GoF的23种设计模式:建造者模式

    ServiceProfile } // 关键点3: 定义一系列构建属性的fluent接口,通过方法的返回值控制属性的构建顺序 idBuilder interface { WithId(id string) typeBuilder } typeBuilder interface { WithType(svcType ServiceType) statusBuilder } statusBuilder interface 关键点5: 为Builder定义一系列构建方法,也即实现关键点3中定义的Fluent接口 func (f *fluentServiceProfileBuilder) WithId(id string) typeBuilder 比如 WithId 方法的返回值是 typeBuilder 类型,表示紧随其后的就是 WithType 方法。

    49540编辑于 2022-05-06
领券