Esempio n. 1
0
 /// <summary>
 /// Initializes a new instance of the WebPluginHelper class
 /// </summary>
 /// <param name="pluginProvider">the plugin-repository that holds all web-plugins that need to be initialized</param>
 /// <param name="serviceProvider">the dependencyInjection infrasturcture that can be used to log errors</param>
 /// <param name="autoPluginsInit"></param>
 /// <param name="logger">a logger instance that is used to log events of this PluginHelper instance</param>
 public WebPluginHelper(IWebPluginsSelector pluginProvider, IServiceProvider serviceProvider, IOptions <PluginsInitOptions> autoPluginsInit, ILogger <WebPluginHelper> logger)
 {
     this.pluginProvider  = pluginProvider;
     this.serviceProvider = serviceProvider;
     this.logger          = logger;
     var init = autoPluginsInit.Value;
 }
Esempio n. 2
0
        /// <summary>
        /// Initializes a new i PluginFactory instance
        /// </summary>
        /// <returns>a Factory that can be used to load further plugins</returns>
        private PluginFactory CreateFactory()
        {
            var retVal = new PluginFactory();

            LogEnvironment.OpenRegistrationTicket(retVal);
            retVal.AllowFactoryParameter = true;
            retVal.RegisterObject(Global.ServiceProviderName, serviceProvider);
            UnknownConstructorParameterEventHandler handler = (sender, args) =>
            {
                PluginFactory       pi = (PluginFactory)sender;
                IWebPluginsSelector availablePlugins = pluginProvider;
                var globalProvider            = serviceProvider.GetService <IGlobalSettingsProvider>();
                var tenantProvider            = serviceProvider.GetService <IScopedSettingsProvider>();
                var preInitializationSequence = tenantProvider?.GetJsonSetting($"PreInitSequenceFor{args.RequestedName}")
                                                ?? globalProvider?.GetJsonSetting($"PreInitSequenceFor{args.RequestedName}");
                var postInitializationSequence = tenantProvider?.GetJsonSetting($"PostInitSequenceFor{args.RequestedName}")
                                                 ?? globalProvider?.GetJsonSetting($"PostInitSequenceFor{args.RequestedName}");
                var       preInitSequence  = DeserializeInitArray(preInitializationSequence);
                var       postInitSequence = DeserializeInitArray(postInitializationSequence);
                WebPlugin plugin           =
                    availablePlugins.GetPlugin(args.RequestedName);
                if (plugin != null)
                {
                    if (serviceProvider.VerifyUserPermissions(new [] { args.RequestedName }, true))
                    {
                        if (preInitSequence.Length != 0)
                        {
                            foreach (var s in preInitSequence)
                            {
                                var tmp = pi[s, true];
                            }
                        }

                        if (!string.IsNullOrEmpty(plugin.Constructor))
                        {
                            args.Value   = pi.LoadPlugin <IPlugin>(plugin.UniqueName, plugin.Constructor);
                            args.Handled = true;
                        }

                        if (postInitSequence.Length != 0)
                        {
                            foreach (var s in postInitSequence)
                            {
                                var tmp = pi[s, true];
                            }
                        }
                    }
                }
                else
                {
                    var tmp = factoryOptions?.GetDependency(args.RequestedName, serviceProvider);
                    args.Handled = tmp != null;
                    args.Value   = tmp;
                }
            };

            void Initializer(object sender, PluginInitializedEventArgs args)
            {
                PluginLoadInterceptHelper.RunInterceptors(retVal, args.Plugin);
            }

            void Finalizer(object sender, EventArgs e)
            {
                LogEnvironment.DisposeRegistrationTicket(sender);
                var pi = (PluginFactory)sender;
                var dp = (IServiceProvider)pi.GetRegisteredObject(Global.ServiceProviderName);

                if (dp != null)
                {
                    factory = null;
                }
                pi.Disposed -= Finalizer;
                pi.UnknownConstructorParameter -= handler;
                pi.PluginInitialized           -= Initializer;
                pi.ImplementGenericType        -= Implementer;
            }

            void Implementer(object sender, ImplementGenericTypeEventArgs args)
            {
                PluginFactory       pi = (PluginFactory)sender;
                IWebPluginsSelector availablePlugins = pluginProvider;
                var impl = availablePlugins.GetGenericParameters(args.PluginUniqueName);

                if (impl != null)
                {
                    var dic         = new Dictionary <string, object>();
                    var assignments = (from t in args.GenericTypes
                                       join a in impl on t.GenericTypeName equals a.GenericTypeName
                                       select new { Arg = t, Type = a.TypeExpression });
                    foreach (var item in assignments)
                    {
                        item.Arg.TypeResult = (Type)ExpressionParser.Parse(item.Type.ApplyFormat(args), dic);
                    }

                    args.Handled = true;
                }
            }

            retVal.UnknownConstructorParameter += handler;
            retVal.PluginInitialized           += Initializer;
            retVal.Disposed             += Finalizer;
            retVal.ImplementGenericType += Implementer;
            return(retVal);
        }
Esempio n. 3
0
 /// <summary>
 /// Initializes a new instance of the WebPluginHelper class
 /// </summary>
 /// <param name="pluginProvider">the plugin-repository that holds all web-plugins that need to be initialized</param>
 /// <param name="serviceProvider">the dependencyInjection infrasturcture that can be used to log errors</param>
 /// <param name="autoPluginsInit"></param>
 /// <param name="factoryOptions">the factory-options used for DI injection into plugins</param>
 /// <param name="logger">a logger instance that is used to log events of this PluginHelper instance</param>
 public WebPluginHelper(IWebPluginsSelector pluginProvider, IServiceProvider serviceProvider, IOptions <PluginsInitOptions> autoPluginsInit, IOptions <FactoryOptions> factoryOptions, ILogger <WebPluginHelper> logger)
     : this(pluginProvider, serviceProvider, autoPluginsInit, logger)
 {
     this.factoryOptions = factoryOptions.Value;
 }