Exemplo n.º 1
0
 /// <summary>
 ///	扫描当前目录加载当前目录下的所有程序集
 /// </summary>
 protected void AttachAssemblyInfo(Assembly assembly)
 {
     if (assembly != null && assemblyLoaded.Add(assembly))
     {
         actorFactoryCreatorList.AddRange(DynamicLoader.Find(assembly, typeof(ActorFactory)));
     }
 }
Exemplo n.º 2
0
		/// <summary>
		///     Internal constructor.  This class cannot be instantiated externally.
		/// </summary>
		internal PlatformManager()
		{
			// First look in current Executing assembly for a PlatformManager
			if ( instance == null )
			{
				DynamicLoader platformMgr = new DynamicLoader();
				IList<ObjectCreator> platforms = platformMgr.Find( typeof( IPlatformManager ) );
				if ( platforms.Count != 0 )
				{
					instance = platformMgr.Find( typeof( IPlatformManager ) )[ 0 ].CreateInstance<IPlatformManager>();
				}
			}

#if !( XBOX || XBOX360 )
			// Then look in loaded assemblies
			if ( instance == null )
			{
				Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
				for ( int index = 0; index < assemblies.Length && instance == null; index++ )
				{
					//TODO: NRSC Added: Deal with Dynamic Assemblies not having a Location
                    //if (assemblies[index].IsDynamic)
                    //    continue;
					try {
					DynamicLoader platformMgr = new DynamicLoader( assemblies[ index ].Location );
					IList<ObjectCreator> platforms = platformMgr.Find( typeof( IPlatformManager ) );
					if ( platforms.Count != 0 )
					{
						instance = platformMgr.Find( typeof( IPlatformManager ) )[ 0 ].CreateInstance<IPlatformManager>();
					}
					} catch (Exception)
					{
					    System.Diagnostics.Debug.WriteLine( String.Format( "Failed to load assembly: {0}.", assemblies[index].FullName ) );	
					}
				}
			}
#endif

			// Then look in external assemblies
			if ( instance == null )
			{
				// find and load a platform manager assembly
				string[] files = Directory.GetFiles( ".", "Axiom.Platforms.*.dll" );
				string file = "";

				// make sure there is 1 platform manager available
				if ( files.Length == 0 )
				{
					throw new PluginException( "A PlatformManager was not found in the execution path, and is required." );
				}
				else
				{
					bool isWindows = IsWindowsOS;
					string platform = IsWindowsOS ? "Win32" : "OpenTK";

					if ( files.Length == 1 )
					{
						file = files[ 0 ];
					}
					else
					{
						for ( int i = 0; i < files.Length; i++ )
						{
							if ( ( files[ i ].IndexOf( platform ) != -1 ) == true )
							{
								file = files[ i ];
							}
						}
					}

					System.Diagnostics.Debug.WriteLine( String.Format( "Selected the PlatformManager contained in {0}.", file ) );
				}

				string path = Path.Combine( System.IO.Directory.GetCurrentDirectory(), file );

				DynamicLoader platformMgr = new DynamicLoader( path );
				IList<ObjectCreator> platforms = platformMgr.Find( typeof( IPlatformManager ) );
				if ( platforms.Count != 0 )
				{
					instance = platformMgr.Find( typeof( IPlatformManager ) )[ 0 ].CreateInstance<IPlatformManager>();
				}

			}

			// All else fails, yell loudly
			if ( instance == null )
				throw new PluginException( "The available Platform assembly did not contain any subclasses of PlatformManager, which is required." );
		}
Exemplo n.º 3
0
		/// <summary>
		///		Scans for plugin files in the current directory.
		/// </summary>
		///<param name="folder"></param>
		///<returns></returns>
		protected IList<ObjectCreator> ScanForPlugins( string folder )
		{
			var pluginFactories = new List<ObjectCreator>();

#if NET_40 && !( XBOX || XBOX360 || WINDOWS_PHONE )
			this.SatisfyImports(folder);
			foreach (var plugin in plugins)
			{
				pluginFactories.Add(new ObjectCreator(plugin.GetType()));
				Debug.WriteLine(String.Format("MEF IPlugin: {0}.", plugin));
			}
#elif !( WINDOWS_PHONE )
			if ( Directory.Exists( folder ) )
			{
				var files = Directory.GetFiles( folder );
				//var assemblyName = Assembly.GetExecutingAssembly().GetName().Name + ".dll";

				foreach ( var file in files )
				{
					var currentFile = Path.GetFileName( file );

					if ( Path.GetExtension( file ) != ".dll" /*|| currentFile == assemblyName */ )
					{
						continue;
					}
					var fullPath = Path.GetFullPath( file );

					if ( !_isValidModule( fullPath ) )
					{
						Debug.WriteLine( String.Format( "Skipped {0} [Not managed]", fullPath ) );
						continue;
					}

					var loader = new DynamicLoader( fullPath );

					pluginFactories.AddRange( loader.Find( typeof ( IPlugin ) ) );
				}
			}
#endif
			return pluginFactories;
		}
Exemplo n.º 4
0
		/// <summary>
		///     Internal constructor.  This class cannot be instantiated externally.
		/// </summary>
		internal PlatformManager()
		{
			// First look in current Executing assembly for a PlatformManager
			if ( instance == null )
			{
				var platformMgr = new DynamicLoader();
				var platforms = platformMgr.Find( typeof ( IPlatformManager ) );
				if ( platforms.Count != 0 )
				{
					instance = platformMgr.Find( typeof ( IPlatformManager ) )[ 0 ].CreateInstance<IPlatformManager>();
				}
			}

#if NET_40 && !( XBOX || XBOX360 || WINDOWS_PHONE )
			if (instance == null)
			{
				this.SatisfyImports(".");
				if (platforms != null && platforms.Count() != 0)
				{
					instance = platforms.First();
					System.Diagnostics.Debug.WriteLine(String.Format("MEF IPlatformManager: {0}.", instance));
				}
			}
#endif

#if !( SILVERLIGHT || WINDOWS_PHONE || XBOX || XBOX360 || NETFX_CORE)
			// Then look in loaded assemblies
			if ( instance == null )
			{
				var assemblies = AppDomain.CurrentDomain.GetAssemblies();
				for ( var index = 0; index < assemblies.Length && instance == null; index++ )
				{
					//TODO: NRSC Added: Deal with Dynamic Assemblies not having a Location
					//if (assemblies[index].IsDynamic)
					//    continue;
					try
					{
						var platformMgr = new DynamicLoader( assemblies[ index ] );
						var platforms = platformMgr.Find( typeof ( IPlatformManager ) );
						if ( platforms.Count != 0 )
						{
							instance = platformMgr.Find( typeof ( IPlatformManager ) )[ 0 ].CreateInstance<IPlatformManager>();
						}
					}
					catch ( Exception )
					{
						System.Diagnostics.Debug.WriteLine( String.Format( "Failed to load assembly: {0}.", assemblies[ index ].FullName ) );
					}
				}
			}

			// Then look in external assemblies
			if ( instance == null )
			{
				// find and load a platform manager assembly
				var cwd = Assembly.GetExecutingAssembly().CodeBase;
				var uri = new Uri( cwd );
				if ( uri.IsFile )
					cwd = Path.GetDirectoryName(uri.LocalPath);
				var files = Directory.GetFiles( cwd, "Axiom.Platforms.*.dll" ).ToArray();
				var file = "";

				// make sure there is 1 platform manager available
				if ( files.Length == 0 )
				{
					throw new PluginException( "A PlatformManager was not found in the execution path, and is required." );
				}
				else
				{
					var isWindows = IsWindowsOS;
					var platform = IsWindowsOS ? "Windows" : "Linux";

					if ( files.Length == 1 )
					{
						file = files[ 0 ];
					}
					else
					{
						for ( var i = 0; i < files.Length; i++ )
						{
							if ( ( files[ i ].IndexOf( platform ) != -1 ) == true )
							{
								file = files[ i ];
							}
						}
					}

					System.Diagnostics.Debug.WriteLine( String.Format( "Selected the PlatformManager contained in {0}.", file ) );
				}

				var path = Path.Combine( System.IO.Directory.GetCurrentDirectory(), file );

				var platformMgr = new DynamicLoader( path );
				var platforms = platformMgr.Find( typeof ( IPlatformManager ) );
				if ( platforms.Count != 0 )
				{
					instance = platformMgr.Find( typeof ( IPlatformManager ) )[ 0 ].CreateInstance<IPlatformManager>();
				}
			}
#endif

			// All else fails, yell loudly
			if ( instance == null )
			{
				throw new PluginException( "The available Platform assembly did not contain any subclasses of PlatformManager, which is required." );
			}
		}
Exemplo n.º 5
0
	    /// <summary>
		///		Scans for plugin files in the current directory.
		/// </summary>
		///<param name="folder"></param>
		///<returns></returns>
		protected IList<ObjectCreator> ScanForPlugins( string folder )
		{
            var pluginFactories = new List<ObjectCreator>();

            if (Directory.Exists(folder))
			{
                var files = Directory.GetFiles(folder);
                var assemblyName = Assembly.GetExecutingAssembly().GetName().Name + ".dll";

                foreach (var file in files)
				{
                    var currentFile = Path.GetFileName(file);

                    if (Path.GetExtension(file) != ".dll" || currentFile == assemblyName)
                        continue;
                    var fullPath = Path.GetFullPath(file);

                    if (!IsValidModule(fullPath))
                    {
                        Debug.WriteLine(String.Format("Skipped {0} [Not managed]", fullPath));
                        continue;
                    }

                    var loader = new DynamicLoader(fullPath);

				    pluginFactories.AddRange( loader.Find( typeof ( IPlugin ) ) );
				}
            }

			return pluginFactories;
		}