コード例 #1
0
 public static PluginLoader <T> Create(string appName,
                                       IPluginPaths paths                     = null,
                                       IAppDomain appDomain                   = null,
                                       IPluginLoaderSettings settings         = null,
                                       ITypeLoader <T> typeLoader             = null,
                                       IAssemblyCache assemblyDictionary      = null,
                                       IAssemblyNameReader assemblyNameReader = null,
                                       IAssemblyLoader assemblyLoader         = null,
                                       IWaiter waiter = null,
                                       IPluginDependencyResolverObjectCreator pluginDependencyResolverObjectCreator = null,
                                       IPluginDependencyResolverCacheFactory pluginDependencyResolverCacheFactory   = null,
                                       IPluginCacheFactory <T> pluginCacheFactory = null,
                                       IPluginLoaderLogger logger = null)
 {
     logger             = logger ?? PluginLoaderLogger.Factory(new AppSettings());
     appDomain          = appDomain ?? new AppDomainWrapper(AppDomain.CurrentDomain, logger);
     paths              = paths ?? new AppPluginPaths(appName, null, appDomain, logger);
     settings           = settings ?? PluginLoaderSettings.Default;
     typeLoader         = typeLoader ?? new TypeLoader <T>(settings, logger);
     assemblyNameReader = assemblyNameReader ?? new AssemblyNameReader();
     assemblyDictionary = assemblyDictionary ?? new AssemblyCache(appDomain, assemblyNameReader, logger);
     assemblyLoader     = assemblyLoader ?? new AssemblyLoader(appDomain, settings, assemblyDictionary, assemblyNameReader, logger);
     waiter             = waiter ?? new Waiter(logger);
     pluginDependencyResolverObjectCreator = pluginDependencyResolverObjectCreator ?? new PluginDependencyResolverObjectCreator(appDomain, settings, assemblyLoader, waiter, new AssemblyResolveCache(), logger);
     pluginDependencyResolverCacheFactory  = pluginDependencyResolverCacheFactory ?? new PluginDependencyResolverCacheFactory(pluginDependencyResolverObjectCreator, logger);
     pluginCacheFactory = pluginCacheFactory ?? new PluginCacheFactory <T>(typeLoader, pluginDependencyResolverCacheFactory, assemblyLoader, logger);
     return(new PluginLoader <T>(paths, pluginCacheFactory));
 }
コード例 #2
0
 public PluginObjectCreator(IPluginLoaderSettings settings,
                            IObjectCreator <T> objectCreator,
                            IPluginLoaderLogger logger)
 {
     _Settings      = settings;
     _Logger        = logger;
     _ObjectCreator = objectCreator;
 }
コード例 #3
0
 public TestRuntimePluginLoader(IAppDomain appDomain,
                                IPluginLoaderSettings settings,
                                IPluginLoaderFactory <IOrganization> pluginLoaderFactory,
                                IPluginObjectCreator <IOrganization> pluginObjectCreator,
                                IPluginPaths pluginPaths,
                                IPluginLoaderLogger logger)
     : base(appDomain, settings, pluginLoaderFactory, pluginObjectCreator, pluginPaths, logger)
 {
 }
コード例 #4
0
ファイル: Program.cs プロジェクト: rhyous/SimplePluginLoader
 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)
 {
 }
コード例 #5
0
 public AssemblyLoader(IAppDomain appDomain,
                       IPluginLoaderSettings settings,
                       IAssemblyCache assemblyCache,
                       IAssemblyNameReader assemblyNameReader,
                       IPluginLoaderLogger logger)
 {
     _AppDomain          = appDomain ?? throw new ArgumentNullException(nameof(appDomain));
     _Settings           = settings ?? throw new ArgumentNullException(nameof(settings));
     _AssemblyCache      = assemblyCache ?? throw new ArgumentNullException(nameof(assemblyCache));
     _AssemblyNameReader = assemblyNameReader ?? throw new ArgumentNullException(nameof(assemblyNameReader));
     _Logger             = logger;
 }
 public PluginDependencyResolverObjectCreator(IAppDomain appDomain,
                                              IPluginLoaderSettings settings,
                                              IAssemblyLoader assemblyLoader,
                                              IWaiter waiter,
                                              IAssemblyResolveCache assemblyResolveCache,
                                              IPluginLoaderLogger logger)
 {
     _AppDomain            = appDomain ?? throw new ArgumentNullException(nameof(appDomain));
     _Settings             = settings ?? throw new ArgumentNullException(nameof(settings));
     _AssemblyLoader       = assemblyLoader ?? throw new ArgumentNullException(nameof(assemblyLoader));
     _Waiter               = waiter;
     _AssemblyResolveCache = assemblyResolveCache;
     _Logger               = logger;
 }
コード例 #7
0
        public static List <string> GetPaths(this IPlugin plugin, IPluginLoaderSettings settings)
        {
            if (plugin == null || string.IsNullOrWhiteSpace(plugin.FullPath))
            {
                return(null);
            }
            var paths = new List <string>
            {
                "",                                                    // Try current path
                plugin.Directory,                                      // Try plugin directory
                Path.Combine(plugin.Directory, "bin"),                 // Try plugin\bin directory
                Path.Combine(plugin.Directory, plugin.Name),           // Try plugin\<pluginName> directory
                Path.Combine(plugin.Directory, plugin.Name, "bin")     // Try plugin\<pluginName>\bin directory
            };

            // This allows for two plugins that share a dll to have Copy Local set to false, and both look to the same folder
            if (settings?.SharedPaths?.Any() != null)
            {
                paths.AddRange(settings.SharedPaths);
            }

            return(paths);
        }
コード例 #8
0
 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;
 }
コード例 #9
0
 public TypeLoader(IPluginLoaderSettings settings,
                   IPluginLoaderLogger logger)
 {
     _Settings = settings ?? throw new ArgumentNullException(nameof(settings));
     _Logger   = logger ?? throw new ArgumentNullException(nameof(logger));
 }