public void Consume(IConsumeContext <FetchAssembly> context) { FetchAssembly message = context.Message; byte[] bytes = assemblyRepository.Fetch(message.Name); log.DebugFormat("Returning {0} bytes for {1}", bytes != null ? bytes.Length : 0, message.Name); FetchAssemblyResponse response = new FetchAssemblyResponse(message); response.Bytes = bytes; context.Respond(response); }
public object Create(PluginDescriptor descriptor, IAssemblyRepository assemblies, IDictionary <string, object> settings) { if (descriptor == null) { throw new ArgumentNullException("descriptor"); } if (assemblies == null) { throw new ArgumentNullException("assemblies"); } try { ResolveEventHandler resolveHandler = new ResolveEventHandler((s, e) => { // Fetch assembly from repository and load it into the appdomain byte[] assemblyBytes = assemblies.Fetch(e.Name); if (assemblyBytes != null) { return(Assembly.Load(assemblyBytes)); } // Unable to resolve this assembly return(null); }); AppDomain.CurrentDomain.AssemblyResolve += resolveHandler; object plugin = AppDomain.CurrentDomain.CreateInstanceAndUnwrap(descriptor.QualifiedName.AssemblyFullName, descriptor.QualifiedName.TypeFullName); AppDomain.CurrentDomain.AssemblyResolve -= resolveHandler; ApplySettings(plugin, settings); this.log.Info(Resources.CreatedPlugin, plugin.GetType().FullName); return(plugin); } catch (PluginException ex) { this.log.Error(ex.Message); throw; } catch (Exception ex) { this.log.Error(ex.Message); throw new PluginException(ex.Message, ex); } }
public object Create(PluginDescriptor descriptor, IAssemblyRepository assemblies, IDictionary<string, object> settings) { if (descriptor == null) throw new ArgumentNullException("descriptor"); if (assemblies == null) throw new ArgumentNullException("assemblies"); try { ResolveEventHandler resolveHandler = new ResolveEventHandler((s, e) => { // Fetch assembly from repository and load it into the appdomain byte[] assemblyBytes = assemblies.Fetch(e.Name); if (assemblyBytes != null) return Assembly.Load(assemblyBytes); // Unable to resolve this assembly return null; }); AppDomain.CurrentDomain.AssemblyResolve += resolveHandler; object plugin = AppDomain.CurrentDomain.CreateInstanceAndUnwrap(descriptor.QualifiedName.AssemblyFullName, descriptor.QualifiedName.TypeFullName); AppDomain.CurrentDomain.AssemblyResolve -= resolveHandler; ApplySettings(plugin, settings); this.log.Info(Resources.CreatedPlugin, plugin.GetType().FullName); return plugin; } catch (PluginException ex) { this.log.Error(ex.Message); throw; } catch (Exception ex) { this.log.Error(ex.Message); throw new PluginException(ex.Message, ex); } }