Mono.Util.IFaceDisco.Main C# (CSharp) Метод

Main() публичный статический Метод

public static Main ( string args ) : void
args string
Результат void
		public static void Main(string[] args) {
			Assembly					asm;
			Type[]						asmTypes;
			InterfaceMapping		map;
			Type[]						interfaces;
			ArrayList					TypesList					= new ArrayList();
			ArrayList					implementingTypes	= new ArrayList();
			string						asmFullPath				= null;
			string						ifaceToDiscover		= null;
			
			if (args.Length < 1 || args.Length > 3) {
				Usage();
				return;
			}

			for (int i = 0; i < args.Length; i++) {
				string arg = args[i];

				if (arg.StartsWith("-") && ((i + 1) < args.Length)) {
					if (arg == "--asm") {
						asmFullPath = args[++i];
					} else {
						Usage();
						return;
					}
				} else {
					// allow only one interface to discover
					if (ifaceToDiscover != null){
						Usage();
						return;
					}
					ifaceToDiscover = arg;
				}
			}

			// find the assembly
			if (null == asmFullPath){
				asm = Assembly.GetAssembly(typeof (System.Object));
			}
			else {
				try{
					asm = Assembly.LoadFrom(asmFullPath);
				}
				catch(Exception e){
					Console.WriteLine("Could not open assembly '{0}' for discovery. Error is: "+e.Message, asmFullPath);
					return;
				}
			}
			asmTypes = asm.GetTypes();

			// examine all the public types
			foreach(Type t in asmTypes) {
				if (t.IsPublic) {
					// find out which, if any, interfaces are "in" the type
					interfaces= t.GetInterfaces();
					if (null != interfaces){
						// look for the interface we want to discover
						foreach (Type iface in interfaces) {
							// this area seems to throw an exception sometimes, just ignore it
							try{
								if (iface.FullName.ToLower() == args[0].ToLower()) {
									// find out if this type is the one which "declares" the interface
									map = t.GetInterfaceMap(iface);
									if (map.TargetMethods[0].DeclaringType.FullName == t.FullName){
										// if so, then we found a class to report
										implementingTypes.Add(t.FullName);
									} // if
								}  // if
							}catch{}
						} // foreach
					} // if
				} // if
			} // foreach

			// sort the list to make it easier to find what you are looking for
			implementingTypes.Sort();
			Console.WriteLine(XMLUtil.ToXML(implementingTypes, "Type", "ImplementingTypes"));
		} // Main()
IFaceDisco