Exemplo n.º 1
0
        public IEnumerable<IPluginManager> Refresh()
        {
            var infos = _repo.List<PluginInfo>();

            // Load all plugins from path
            var path = HdknConfig.GetPath("Paths.Plugins");

            foreach(var info in _fs.GetFileSystemInfos(path))
            {
                if(_loaders.Any(l => l.CanLoad(info.FullName)) && infos.All(i => i.Path != info.FullName))
                {
                    Logger.Info("Found new plugin {0}", info.FullName);

                    var pluginInfo = new PluginInfo {Path = info.FullName};
                    _repo.Save(pluginInfo);
                    infos.Add(pluginInfo);
                }
            }

            // load all PluginInfo where Name not in _managers.Keys
            var ret = new List<IPluginManager>();

            foreach (PluginInfo info in infos)
            {
                try
                {
                    var manager = new DefaultPluginManager(info, _mbus, _runner, _loaders);

                    if (!_managers.ContainsKey(manager.Name))
                    {
                        manager.Initialize();
                        manager.Install();

                        _managers.Add(manager.Name, manager);

                        ret.Add(manager);
                    }
                }
                catch(Exception e)
                {
                    Logger.ErrorException(String.Format("Could not create plugin from path {0}", info.Path), e);
                }
            }

            return ret;
        }
Exemplo n.º 2
0
        public void Load(IEnumerable<byte[]> rawAssemblies)
        {
            var assemblies = rawAssemblies.Select(Assembly.Load).ToList();

            // Run migrations
            foreach (var asm in assemblies)
            {
                _migrationRunner.Up(asm);
            }

            var childResolver = Kernel.Resolver.CreateChildResolver(assemblies);
            var plugin = childResolver.Get<IPlugin>();
            var manager = new DefaultPluginManager(plugin);

            _messageBus.Send<IPluginLoading>(msg =>
                {
                    msg.Assemblies = assemblies.ToArray();
                    msg.Name = manager.Name;
                    msg.Version = manager.Version;
                }).Wait();

            try
            {
                manager.Load();
            }
            catch (Exception e)
            {
                Logger.ErrorException(String.Format("Error when loading plugin '{0}'.", manager.Name), e);
                return;
            }

            _managers.Add(manager.Name, manager);

            _messageBus.Send<IPluginLoaded>(msg =>
                {
                    msg.Manager = manager;
                });
        }