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);
        }
示例#2
0
        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);
              }
        }