当前位置: 首页>>代码示例>>C#>>正文


C# IRegistry.RegisterPlugin方法代码示例

本文整理汇总了C#中IRegistry.RegisterPlugin方法的典型用法代码示例。如果您正苦于以下问题:C# IRegistry.RegisterPlugin方法的具体用法?C# IRegistry.RegisterPlugin怎么用?C# IRegistry.RegisterPlugin使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IRegistry的用法示例。


在下文中一共展示了IRegistry.RegisterPlugin方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: RegisterPlugins

        private static IList<IPluginDescriptor> RegisterPlugins(IRegistry registry, IList<PluginData> topologicallySortedPlugins)
        {
            IPluginDescriptor[] pluginDescriptors = new IPluginDescriptor[topologicallySortedPlugins.Count];
            for (int i = 0; i < topologicallySortedPlugins.Count; i++)
            {
                Plugin plugin = topologicallySortedPlugins[i].Plugin;
                DirectoryInfo baseDirectory = topologicallySortedPlugins[i].BaseDirectory;

                try
                {
                    var pluginType = plugin.PluginType != null
                        ? new TypeName(plugin.PluginType)
                        : new TypeName(typeof(DefaultPlugin));

                    List<string> disabledReasons = new List<string>();

                    var pluginRegistration = new PluginRegistration(plugin.PluginId,
                        pluginType, baseDirectory);
                    if (plugin.Parameters != null)
                        pluginRegistration.PluginProperties = plugin.Parameters.PropertySet;
                    if (plugin.Traits != null)
                        pluginRegistration.TraitsProperties = plugin.Traits.PropertySet;

                    pluginRegistration.ProbingPaths = plugin.ProbingPaths;
                    pluginRegistration.RecommendedInstallationPath = plugin.RecommendedInstallationPath;

                    if (plugin.EnableCondition != null)
                        pluginRegistration.EnableCondition = Condition.Parse(plugin.EnableCondition);

                    foreach (var file in plugin.Files)
                        pluginRegistration.FilePaths.Add(file.Path);

                    foreach (var dependency in plugin.Dependencies)
                    {
                        string pluginDependencyId = dependency.PluginId;

                        IPluginDescriptor pluginDependency = registry.Plugins[pluginDependencyId];
                        if (pluginDependency == null)
                        {
                            disabledReasons.Add(string.Format("Could not find plugin '{0}' upon which this plugin depends.", pluginDependencyId));
                        }
                        else
                        {
                            pluginRegistration.PluginDependencies.Add(pluginDependency);
                        }
                    }

                    foreach (var assembly in plugin.Assemblies)
                    {
                        Uri absoluteCodeBase;
                        if (assembly.CodeBase != null)
                        {
                            List<string> attemptedPaths = new List<string>();
                            string foundCodeBasePath = ProbeForCodeBase(baseDirectory, plugin.ProbingPaths, assembly.CodeBase, attemptedPaths);
                            if (foundCodeBasePath == null)
                            {
                                StringBuilder formattedPaths = new StringBuilder();
                                foreach (string path in attemptedPaths)
                                {
                                    if (formattedPaths.Length != 0)
                                        formattedPaths.Append(", ");
                                    formattedPaths.Append("'").Append(path).Append("'");
                                }

                                disabledReasons.Add(string.Format("Could not find assembly '{0}' after probing for its code base in {1}.",
                                    assembly.FullName, formattedPaths));
                                absoluteCodeBase = null;
                            }
                            else
                            {
                                absoluteCodeBase = new Uri(foundCodeBasePath);
                            }
                        }
                        else
                        {
            #if STRICT_GAC_CHECKS
                            if (!IsAssemblyRegisteredInGAC(assembly.FullName))
                            {
                                disabledReasons.Add(
                                    string.Format("Could not find assembly '{0}' in the global assembly cache.",
                                        assembly.FullName));
                            }
            #endif

                            absoluteCodeBase = null;
                        }

                        var assemblyBinding = new AssemblyBinding(new AssemblyName(assembly.FullName))
                        {
                            CodeBase = absoluteCodeBase,
                            QualifyPartialName = assembly.QualifyPartialName,
                            ApplyPublisherPolicy = assembly.ApplyPublisherPolicy
                        };

                        foreach (BindingRedirect redirect in assembly.BindingRedirects)
                            assemblyBinding.AddBindingRedirect(new AssemblyBinding.BindingRedirect(redirect.OldVersion));

                        pluginRegistration.AssemblyBindings.Add(assemblyBinding);
                    }

//.........这里部分代码省略.........
开发者ID:dougrathbone,项目名称:mbunit-v3,代码行数:101,代码来源:PluginCatalog.cs


注:本文中的IRegistry.RegisterPlugin方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。