//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
// 
using System;
using System.Reflection;

namespace LateBinding
{
	/// <summary>
	/// Podsumowanie dla LateBindingMain.
	/// </summary>
	class LateBindingMain
	{
		static void Main(string[] args)
		{
			Assembly first = Assembly.LoadFrom(@"..\..\First\bin\debug\first.dll");
			Assembly second = Assembly.LoadFrom(@"..\..\Second\bin\debug\second.dll");
			Assembly [] assemblies = new Assembly[] { first, second };
			foreach(Assembly a in assemblies)
			{
				Type[] types = a.GetTypes();
				foreach(Type t in types)
				{
					try
					{
						object o = Activator.CreateInstance(t);
						MethodInfo m = t.GetMethod("OutputMessage");
						m.Invoke(o, new object [] {"To jest moja wiadomość"});
					}
					catch(Exception e)
					{
						Console.WriteLine(e);
					}
				}
			}
		}
	}
}
