本文整理汇总了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);
}
//.........这里部分代码省略.........