private static AssemblyBuilderAccess ToAssemblyBuilderAccess( MethodInvokerEmitterMode mode ) { switch ( mode ) { case MethodInvokerEmitterMode.Saveable: { return AssemblyBuilderAccess.RunAndSave; } case MethodInvokerEmitterMode.Collectable: { return AssemblyBuilderAccess.RunAndCollect; } default: { return AssemblyBuilderAccess.RunAndCollect; } } }
public DefaultMethodInvokerProvider( MethodInvokerEmitterMode mode ) { this._invokerEmitter = new MethodInvokerEmitter( mode ); }
public MethodInvokerEmitter( MethodInvokerEmitterMode mode ) { int sequence = Interlocked.Increment( ref _sequence ); string name = "MsgPack.Rpc.MethodInvokers." + sequence; this._targetAssembly = AppDomain.CurrentDomain.DefineDynamicAssembly( new AssemblyName( name ), ToAssemblyBuilderAccess( mode ) ); this._targetModule = this._targetAssembly.DefineDynamicModule( name + ".dll" ); }