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)); }
public TestRuntimePluginLoader(IAppDomain appDomain, IPluginLoaderSettings settings, IPluginLoaderFactory <IOrganization> pluginLoaderFactory, IPluginObjectCreator <IOrganization> pluginObjectCreator, IPluginPaths pluginPaths, IPluginLoaderLogger logger) : base(appDomain, settings, pluginLoaderFactory, pluginObjectCreator, pluginPaths, logger) { }
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)); }
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; }
public T CreatePluginObject(Type t, IPluginObjectCreator <T> pluginObjectCreator) { return(pluginObjectCreator.Create(this, t)); }
public List <T> CreatePluginObjects(IPluginObjectCreator <T> pluginObjectCreator) => PluginTypes?.Select(t => CreatePluginObject(t, pluginObjectCreator)).Where(o => o != null).ToList();