private void Deleted(string folderPath)
        {
            lock (_lock)
            {
                _log.Debug("PluginService: folder '{0}' deleted.", folderPath);

                //try remove old
                AppDomain      oldAppDomain = null;
                List <TPlugin> oldPlugins   = new List <TPlugin>();
                if (_plugins.ContainsKey(folderPath))
                {
                    oldPlugins = _plugins[folderPath];
                    _plugins.Remove(folderPath);
                    oldAppDomain = SeparateAppDomain.Extract(folderPath);
                }

                //raise event
                PluginsRemoved(this, oldPlugins);

                if (oldAppDomain != null)
                {
                    AppDomain.Unload(oldAppDomain);
                }
            }
        }
        private void Created(string folderPath)
        {
            lock (_lock)
            {
                _log.Debug("PluginService: folder '{0}' created.", folderPath);
                var mefLoader = SeparateAppDomain.CreateInstance <MefLoader>(folderPath, folderPath);
                var plugins   = LoadPlugins(mefLoader);
                if (plugins.Count == 0)
                {
                    SeparateAppDomain.Delete(folderPath);
                    return;
                }

                _plugins.Add(folderPath, plugins);
                PluginsAdded(this, plugins);
            }
        }
        private void Renamed(string oldFolderPath, string newFolderPath)
        {
            lock (_lock)
            {
                _log.Debug("PluginService: folder '{0}' renamed into '{1}'.", oldFolderPath, newFolderPath);

                //try remove old
                AppDomain      oldAppDomain = null;
                List <TPlugin> oldPlugins   = new List <TPlugin>();
                if (_plugins.ContainsKey(oldFolderPath))
                {
                    oldPlugins = _plugins[oldFolderPath];
                    _plugins.Remove(oldFolderPath);
                    oldAppDomain = SeparateAppDomain.Extract(oldFolderPath);
                }

                //try create new
                var mefLoader  = SeparateAppDomain.CreateInstance <MefLoader>(newFolderPath, newFolderPath);
                var newPlugins = LoadPlugins(mefLoader);
                if (newPlugins.Count != 0)
                {
                    _plugins.Add(newFolderPath, newPlugins);
                }

                //raise event
                PluginsChanged(this, oldPlugins, newPlugins);

                if (newPlugins.Count == 0)
                {
                    SeparateAppDomain.Delete(newFolderPath);
                }
                if (oldAppDomain != null)
                {
                    AppDomain.Unload(oldAppDomain);
                }
            }
        }