public PluginFinder(IPluginLoader <T> pluginLoader,
                     IPluginObjectCreator <T> pluginObjectCreator,
                     IPluginLoaderLogger logger)
 {
     _PluginLoader        = pluginLoader ?? throw new ArgumentNullException(nameof(pluginLoader));
     _PluginObjectCreator = pluginObjectCreator ?? throw new ArgumentNullException(nameof(pluginObjectCreator));
     _Logger = logger ?? throw new ArgumentNullException(nameof(logger));
 }
Exemple #2
0
 public TestRuntimePluginLoader(IAppDomain appDomain,
                                IPluginLoaderSettings settings,
                                IPluginLoaderFactory <IOrganization> pluginLoaderFactory,
                                IPluginObjectCreator <IOrganization> pluginObjectCreator,
                                IPluginPaths pluginPaths,
                                IPluginLoaderLogger logger)
     : base(appDomain, settings, pluginLoaderFactory, pluginObjectCreator, pluginPaths, logger)
 {
 }
Exemple #3
0
 public CavemanHammerRuntimePluginLoader(IAppDomain appDomain,
                                         IPluginLoaderSettings settings,
                                         IPluginLoaderFactory <ICaveManTool <Hammer> > pluginLoaderFactory,
                                         IPluginObjectCreator <ICaveManTool <Hammer> > pluginObjectCreator,
                                         IPluginPaths pluginPaths   = null,
                                         IPluginLoaderLogger logger = null)
     : base(appDomain, settings, pluginLoaderFactory, pluginObjectCreator, pluginPaths, logger)
 {
 }
        public virtual IList <T> CreatePluginObjects(IPluginObjectCreator <T> pluginObjectCreator = null)
        {
            var pluginObjects = PluginCollection?.CreatePluginObjects(pluginObjectCreator ?? _PluginObjectCreator);

            if (_DisconnectResolverOnPluginLoad)
            {
                foreach (var plugin in PluginCollection)
                {
                    plugin.DependencyResolver.RemoveDependencyResolver();
                }
            }
            return(pluginObjects);
        }
        /// <summary>
        /// Find a plugin by name. The plugin must implement a Name property.
        ///     public string Name { get; set; }
        /// The Dependency resolver is only loaded for the found plugin.
        /// </summary>
        /// <param name="pluginName">The plugin name</param>
        /// <param name="dir">The directory to search</param>
        /// <returns>A found plugin of type T.</returns>
        public T FindPlugin(string pluginName, string dir, IPluginObjectCreator <T> pluginObjectCreator = null)
        {
            if (string.IsNullOrWhiteSpace(pluginName))
            {
                return(default(T));
            }
            if (string.IsNullOrWhiteSpace(dir))
            {
                return(default(T));
            }
            _Logger?.WriteLine(PluginLoaderLogLevel.Info, $"Attempting to find plugin: {pluginName}; from path: {dir}");
            var plugins = _PluginLoader.LoadPlugins(Directory.GetFiles(dir, DllExtension));

            if (plugins == null || !plugins.Any())
            {
                return(default(T));
            }
            pluginObjectCreator = pluginObjectCreator ?? _PluginObjectCreator;
            foreach (var plugin in plugins)
            {
                // Find by attribute (New preferred method)
                foreach (var type in plugin.PluginTypes)
                {
                    var pluginAttribute = type.GetCustomAttribute <PluginAttribute>();
                    if (pluginAttribute != null && pluginName.Equals(pluginAttribute.Name, StringComparison.InvariantCultureIgnoreCase))
                    {
                        return(plugin.CreatePluginObject(type, pluginObjectCreator));
                    }
                }

                // Find by a Named property on instance of class (legacy way)
                var pluginObjects = plugin.CreatePluginObjects(pluginObjectCreator);
                if (pluginObjects == null)
                {
                    continue;
                }
                foreach (var obj in pluginObjects)
                {
                    dynamic namedObj = obj;
                    if (namedObj != null)
                    {
                        if (namedObj.Name.Equals(pluginName, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(obj);
                        }
                    }
                }
            }
            return(default(T));
        }
Exemple #6
0
        public List <T> CreatePluginObjects(IPluginObjectCreator <T> pluginObjectCreator)
        {
            var list = new List <T>();

            foreach (var plugin in this)
            {
                var pluginObjects = plugin.CreatePluginObjects(pluginObjectCreator);
                if (pluginObjects != null && pluginObjects.Any())
                {
                    list.AddRange(pluginObjects);
                }
            }
            return(list);
        }
        public void PluginFinder_FindPlugin_DirNullEmptyOrWhitespace_ExpectedBehavior(string s)
        {
            // Arrange
            var    pluginFinder = CreatePluginFinder();
            string pluginName   = "MyPlugin";
            string dir          = s;
            IPluginObjectCreator <IOrg> pluginObjectCreator = null;

            // Act
            var result = pluginFinder.FindPlugin(pluginName, dir, pluginObjectCreator);

            // Assert
            Assert.IsNull(result);
            _MockRepository.VerifyAll();
        }
 public RuntimePluginLoaderBase(IAppDomain appDomain,
                                IPluginLoaderSettings settings,
                                IPluginLoaderFactory <T> pluginLoaderFactory,
                                IPluginObjectCreator <T> pluginObjectCreator,
                                IPluginPaths pluginPaths                = null,
                                IPluginLoaderLogger logger              = null,
                                bool disconnectResolverOnPluginLoad     = false,
                                bool disconnectResolverOnPluginTypeLoad = false)
 {
     _AppDomain           = appDomain ?? throw new ArgumentNullException(nameof(appDomain));
     _Settings            = settings ?? throw new ArgumentNullException(nameof(settings));
     _PluginLoaderFactory = pluginLoaderFactory ?? throw new ArgumentNullException(nameof(pluginLoaderFactory));
     _PluginObjectCreator = pluginObjectCreator ?? throw new ArgumentNullException(nameof(pluginObjectCreator));
     pluginPaths          = pluginPaths ?? new AppPluginPaths(_Settings.AppName, GetDefaultPluginDirectory(), _AppDomain, _Logger);
     _PluginPaths         = string.IsNullOrWhiteSpace(PluginSubFolder)
                  ? pluginPaths
                  : new PluginPaths {
         Paths = pluginPaths.Paths.Select(p => Path.Combine(p, PluginSubFolder))
     };
     _Logger = logger;
     _DisconnectResolverOnPluginLoad     = disconnectResolverOnPluginLoad;
     _DisconnectResolverOnPluginTypeLoad = disconnectResolverOnPluginTypeLoad;
 }
Exemple #9
0
 public T CreatePluginObject(Type t, IPluginObjectCreator <T> pluginObjectCreator)
 {
     return(pluginObjectCreator.Create(this, t));
 }
Exemple #10
0
 public List <T> CreatePluginObjects(IPluginObjectCreator <T> pluginObjectCreator) => PluginTypes?.Select(t => CreatePluginObject(t, pluginObjectCreator)).Where(o => o != null).ToList();