internal void BindEditedPlugin(PluginDiscoverer discoverer)
 {
     _sourcePlugin = discoverer.FindPlugin(_source);
 }
            public Merger(PluginDiscoverer discoverer)
            {
                _discoverer        = discoverer;
                _hasBeenDiscovered = new HashSet <DiscoveredInfo>();

                _newAssemblies     = new List <PluginAssemblyInfo>();
                _changedAssemblies = new List <PluginAssemblyInfo>();
                _deletedAssemblies = new List <PluginAssemblyInfo>();

                _newPlugins     = new List <PluginInfo>();
                _changedPlugins = new List <PluginInfo>();
                _deletedPlugins = new List <PluginInfo>();

                _newEditors     = new List <PluginConfigAccessorInfo>();
                _changedEditors = new List <PluginConfigAccessorInfo>();
                _deletedEditors = new List <PluginConfigAccessorInfo>();

                _newOldPlugins     = new List <PluginInfo>();
                _deletedOldPlugins = new List <PluginInfo>();

                _newMissingAssemblies     = new List <string>();
                _deletedMissingAssemblies = new List <string>();

                _newServices     = new List <ServiceInfo>();
                _changedServices = new List <ServiceInfo>();
                _deletedServices = new List <ServiceInfo>();

                NewAssemblies            = new ReadOnlyListOnIList <PluginAssemblyInfo>(_newAssemblies);
                ChangedAssemblies        = new ReadOnlyListOnIList <PluginAssemblyInfo>(_changedAssemblies);
                DeletedAssemblies        = new ReadOnlyListOnIList <PluginAssemblyInfo>(_deletedAssemblies);
                NewPlugins               = new ReadOnlyListOnIList <PluginInfo>(_newPlugins);
                ChangedPlugins           = new ReadOnlyListOnIList <PluginInfo>(_changedPlugins);
                DeletedPlugins           = new ReadOnlyListOnIList <PluginInfo>(_deletedPlugins);
                NewEditors               = new ReadOnlyListOnIList <PluginConfigAccessorInfo>(_newEditors);
                ChangedEditors           = new ReadOnlyListOnIList <PluginConfigAccessorInfo>(_changedEditors);
                DeletedEditors           = new ReadOnlyListOnIList <PluginConfigAccessorInfo>(_deletedEditors);
                NewServices              = new ReadOnlyListOnIList <ServiceInfo>(_newServices);
                ChangedServices          = new ReadOnlyListOnIList <ServiceInfo>(_changedServices);
                DeletedServices          = new ReadOnlyListOnIList <ServiceInfo>(_deletedServices);
                NewOldPlugins            = new ReadOnlyListOnIList <PluginInfo>(_newOldPlugins);
                DeletedOldPlugins        = new ReadOnlyListOnIList <PluginInfo>(_deletedOldPlugins);
                NewAssemblies            = new ReadOnlyListOnIList <PluginAssemblyInfo>(_newAssemblies);
                ChangedAssemblies        = new ReadOnlyListOnIList <PluginAssemblyInfo>(_changedAssemblies);
                DeletedAssemblies        = new ReadOnlyListOnIList <PluginAssemblyInfo>(_deletedAssemblies);
                NewPlugins               = new ReadOnlyListOnIList <PluginInfo>(_newPlugins);
                ChangedPlugins           = new ReadOnlyListOnIList <PluginInfo>(_changedPlugins);
                DeletedPlugins           = new ReadOnlyListOnIList <PluginInfo>(_deletedPlugins);
                NewEditors               = new ReadOnlyListOnIList <PluginConfigAccessorInfo>(_newEditors);
                ChangedEditors           = new ReadOnlyListOnIList <PluginConfigAccessorInfo>(_changedEditors);
                DeletedEditors           = new ReadOnlyListOnIList <PluginConfigAccessorInfo>(_deletedEditors);
                NewServices              = new ReadOnlyListOnIList <ServiceInfo>(_newServices);
                ChangedServices          = new ReadOnlyListOnIList <ServiceInfo>(_changedServices);
                DeletedServices          = new ReadOnlyListOnIList <ServiceInfo>(_deletedServices);
                NewOldPlugins            = new ReadOnlyListOnIList <PluginInfo>(_newOldPlugins);
                DeletedOldPlugins        = new ReadOnlyListOnIList <PluginInfo>(_deletedOldPlugins);
                NewMissingAssemblies     = new ReadOnlyListOnIList <string>(_newMissingAssemblies);
                DeletedMissingAssemblies = new ReadOnlyListOnIList <string>(_deletedMissingAssemblies);

                _dicAssemblies = new Dictionary <string, PluginAssemblyInfo>();
                foreach (PluginAssemblyInfo item in _discoverer._allAssemblies)
                {
                    _dicAssemblies.Add(item.AssemblyFileName, item);
                }

                _dicEditors = new Dictionary <EditorKey, PluginConfigAccessorInfo>();
                _dicPlugins = new Dictionary <KeyValuePair <Guid, Version>, PluginInfo>();
                foreach (PluginInfo item in _discoverer._allPlugins)
                {
                    foreach (PluginConfigAccessorInfo editor in item.EditorsInfo)
                    {
                        _dicEditors.Add(new EditorKey(editor.Plugin.PluginId, editor.Source), editor);
                    }
                    _dicPlugins.Add(new KeyValuePair <Guid, Version>(item.PluginId, item.Version), item);
                }
                foreach (PluginInfo item in _discoverer._oldPlugins)
                {
                    foreach (PluginConfigAccessorInfo editor in item.EditorsInfo)
                    {
                        _dicEditors.Add(new EditorKey(editor.Plugin.PluginId, editor.Source), editor);
                    }
                    _dicPlugins.Add(new KeyValuePair <Guid, Version>(item.PluginId, item.Version), item);
                }

                _dicServices = new Dictionary <string, ServiceInfo>();
                Debug.Assert(_discoverer._allServices.Intersect(_discoverer._notFoundServices).Count() == _discoverer._notFoundServices.Count,
                             "Not found services are includes into the all services collection.");
                foreach (ServiceInfo service in _discoverer._allServices)
                {
                    _dicServices.Add(service.AssemblyQualifiedName, service);
                }
            }
 internal PluginConfigAccessorInfo(PluginDiscoverer discoverer)
     : base(discoverer)
 {
 }
 internal PluginAssemblyInfo(PluginDiscoverer discoverer)
     : base(discoverer)
 {
     _pluginsCollection  = new List <PluginInfo>();
     _servicesCollection = new List <ServiceInfo>();
 }
 protected DiscoveredInfo(PluginDiscoverer discoverer)
 {
     _discoverer = discoverer;
     _version    = _discoverer.CurrentVersion;
 }
        public void TestRediscoverOneAssembly()
        {
            DiscoverDoneEventArgs lastDiscoverEventArgs = null;

            PluginDiscoverer Discoverer = new CK.Plugin.Discoverer.PluginDiscoverer();

            Discoverer.DiscoverDone += (sender, e) => lastDiscoverEventArgs = e;

            TestBase.CopyPluginToTestDir("ServiceA.dll");

            Discoverer.Discover(TestBase.TestFolderDir, true);
            Assert.That(Discoverer.AllAssemblies.Count, Is.EqualTo(1));
            Assert.That(Discoverer.AllPlugins.Count, Is.EqualTo(1));

            // Test methods, events and properties info (ServiceA.dll):
            {
                var events     = Discoverer.Services.First().EventsInfoCollection;
                var methods    = Discoverer.Services.First().MethodsInfoCollection;
                var properties = Discoverer.Services.First().PropertiesInfoCollection;

                Assert.That(events.Count, Is.EqualTo(1));
                Assert.That(methods.Count, Is.EqualTo(2));
                Assert.That(properties.Count, Is.EqualTo(1));

                Assert.That(events.First().Name, Is.EqualTo("HasStarted"));

                Assert.That(methods.First().Name, Is.EqualTo("Add"));
                Assert.That(methods.First().Parameters.Count, Is.EqualTo(2));
                Assert.That(methods.First().Parameters.First().ParameterName, Is.EqualTo("a"));
                Assert.That(methods.First().Parameters.Last().ParameterName, Is.EqualTo("b"));
                Assert.That(methods.First().ReturnType, Is.EqualTo("System.Int32"));

                Assert.That(properties.First().Name, Is.EqualTo("HasBeenStarted"));
                Assert.That(properties.First().PropertyType, Is.EqualTo("System.Boolean"));
            }

            // We add the new one: it has the same assembly name but not the same content (Plugin01 is kept as-is
            // but the ServiceA.2 contains another plugin.
            // ==> Two "identical" assemblies are now available.
            TestBase.CopyPluginToTestDir(@"ServiceA.2\ServiceA.dll");
            Discoverer.Discover(TestBase.TestFolderDir, true);
            Assert.That(Discoverer.AllAssemblies.Count, Is.EqualTo(2));
            Assert.That(Discoverer.AllAssemblies.Single(a => a.AssemblyFileName.Contains("ServiceA.2")).HasError, Is.True, "The 2nd assembly is on error: the other one has been discovered first.");

            Discoverer.Discover(TestBase.TestFolderDir, true);
            Assert.That(lastDiscoverEventArgs.ChangeCount, Is.EqualTo(0), "Discovering twice an assembly error (no bug, no change).");

            // We remove the first one, and we discover again.
            TestBase.RemovePluginFromTestDir(@"ServiceA.dll");
            Discoverer.Discover(TestBase.TestFolderDir, true);
            Assert.That(lastDiscoverEventArgs.ChangeCount, Is.GreaterThan(0), "There are changes.");

            Assert.That(Discoverer.AllAssemblies.Count, Is.EqualTo(1), "The first assembly has been deleted.");
            Assert.That(lastDiscoverEventArgs.DeletedAssemblies.Count, Is.EqualTo(1), "...that's what I said.");
            Assert.That(Discoverer.AllPlugins.Count, Is.EqualTo(2), "ServiceA.2/ServiceA.dll contains 2 plugins.");

            Assert.That(lastDiscoverEventArgs.NewPlugins.Count, Is.EqualTo(1), "Plugin01 (same id) exists in both assembly.");

            //Test methods, events and properties info :
            {
                var events     = Discoverer.Services.First().EventsInfoCollection;
                var methods    = Discoverer.Services.First().MethodsInfoCollection;
                var properties = Discoverer.Services.First().PropertiesInfoCollection;

                Assert.That(events.Count, Is.EqualTo(1));
                Assert.That(methods.Count, Is.EqualTo(1));
                Assert.That(properties.Count, Is.EqualTo(1));

                Assert.That(events.First().Name, Is.EqualTo("DifferentHasStarted"));

                Assert.That(methods.First().Name, Is.EqualTo("Add"));
                Assert.That(methods.First().Parameters.Count, Is.EqualTo(2));
                Assert.That(methods.First().Parameters.First().ParameterName, Is.EqualTo("a"));
                Assert.That(methods.First().Parameters.Last().ParameterName, Is.EqualTo("b"));
                Assert.That(methods.First().Parameters.First().ParameterType, Is.EqualTo("System.Double"));
                Assert.That(methods.First().Parameters.Last().ParameterType, Is.EqualTo("System.Int32"));
                Assert.That(methods.First().ReturnType, Is.EqualTo("System.Int32"));

                Assert.That(properties.First().Name, Is.EqualTo("HasBeenStarted"));
                Assert.That(properties.First().PropertyType, Is.EqualTo("System.Boolean"));
            }
        }
Exemple #7
0
 internal ServiceReferenceInfo(PluginDiscoverer discoverer)
     : base(discoverer)
 {
 }
Exemple #8
0
 internal PluginInfo( PluginDiscoverer discoverer )
     : base( discoverer )
 {
 }