示例#1
0
        protected override bool CreateNode(INodeInfo nodeInfo, IInternalPluginHost pluginHost)
        {
            var plugin = pluginHost.Plugin;

            //make the host mark all its pins for possible deletion
            pluginHost.Plugin = null;

            //dispose previous plugin
            if (plugin != null)
            {
                DisposePlugin(plugin);
            }

            //create the new plugin
            var type = DelegateNodeType(nodeInfo);

            if (type == null)
            {
                return(false);
            }

            var pluginContainer = new PluginContainer(
                pluginHost,
                IORegistry,
                ParentContainer,
                FNodeInfoFactory,
                null,
                type,
                nodeInfo);

            plugin = pluginContainer;
            PluginContainers.UpdateGeneric(pluginContainer.PluginBase, pluginContainer);
            AssignOptionalPluginInterfaces(pluginHost, pluginContainer.PluginBase);

            ProcessNode(pluginContainer, nodeInfo);

            PluginCreated?.Invoke(pluginContainer.PluginBase, pluginHost);

            pluginHost.Plugin = plugin;
            return(true);
        }