Exemplo n.º 1
0
        private void ReadConfiguration(PlugInConfiguration configuration, HashSet <string> loadedAssemblies)
        {
            if (!this.knownPlugIns.ContainsKey(configuration.TypeId))
            {
                if (!string.IsNullOrEmpty(configuration.ExternalAssemblyName) &&
                    !loadedAssemblies.Contains(configuration.ExternalAssemblyName.ToLower()))
                {
                    loadedAssemblies.Add(configuration.ExternalAssemblyName.ToLower());

                    try
                    {
                        var assembly = Assembly.LoadFile("plugins\\" + configuration.ExternalAssemblyName);
                        this.DiscoverAndRegisterPlugIns(assembly);
                    }
                    catch (Exception e)
                    {
                        Log.Error($"Error while loading external plugin assembly {configuration.ExternalAssemblyName} for plugin {configuration.TypeId}.", e);
                        return;
                    }
                }
                else if (!string.IsNullOrEmpty(configuration.CustomPlugInSource))
                {
                    Assembly customPlugInAssembly = this.CompileCustomPlugInAssembly(configuration);
                    this.DiscoverAndRegisterPlugIns(customPlugInAssembly);
                }
                else
                {
                    // nothing we can do
                }
            }

            if (this.knownPlugIns.TryGetValue(configuration.TypeId, out Type plugInType))
            {
                if (!configuration.IsActive)
                {
                    this.DeactivatePlugIn(plugInType);
                }
            }
            else
            {
                Log.Warn($"Unknown plugin type for id {configuration.TypeId}");
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Gets the configuration.
 /// </summary>
 /// <typeparam name="T">The custom configuration type.</typeparam>
 /// <param name="configuration">The configuration.</param>
 /// <returns>
 /// The custom configuration as <typeparamref name="T" />.
 /// </returns>
 public static T GetConfiguration <T>(this PlugInConfiguration configuration)
     where T : class
 {
     if (string.IsNullOrWhiteSpace(configuration.CustomConfiguration))
     {
         return(default);
Exemplo n.º 3
0
        private Assembly CompileCustomPlugInAssembly(PlugInConfiguration configuration)
        {
            var syntaxTree = SyntaxFactory.ParseSyntaxTree(configuration.CustomPlugInSource);

            return(syntaxTree.CompileAndLoad($"CustomPlugIn_{configuration.TypeId}"));
        }
Exemplo n.º 4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PlugInConfigurationChangedEventArgs"/> class.
 /// </summary>
 /// <param name="plugInType">Type of the plug in.</param>
 /// <param name="configuration">The changed configuration.</param>
 public PlugInConfigurationChangedEventArgs(Type plugInType, PlugInConfiguration configuration)
     : base(plugInType)
 {
     this.Configuration = configuration;
 }