/* A Programmer's Introduction to C# (Second Edition) by Eric Gunnerson Publisher: Apress L.P. ISBN: 1-893115-62-3 */ // 30 - Execution-Time Code GenerationLoading AssembliesMaking it Dynamic // copyright 2000 Eric Gunnerson // file=LogAddInToFile.cs // compile with: csc /r:..logdriver.dll /target:library logaddintofile.cs using System; using System.Collections; using System.IO; public class LogAddInToFile: ILogger { StreamWriter streamWriter; public LogAddInToFile() { streamWriter = File.CreateText(@"logger.log"); streamWriter.AutoFlush = true; } public void Log(string message) { streamWriter.WriteLine(message); } } //============================================================= // 30 - Execution-Time Code GenerationLoading Assemblies // copyright 2000 Eric Gunnerson // file=LogDriver.cs // compile with: csc /target:library LogDriver.cs using System; using System.Collections; public interface ILogger { void Log(string message); } public class LogDriver { ArrayList loggers = new ArrayList(); public LogDriver() { } public void AddLogger(ILogger logger) { loggers.Add(logger); } public void Log(string message) { foreach (ILogger logger in loggers) { logger.Log(message); } } } public class LogConsole: ILogger { public void Log(string message) { Console.WriteLine(message); } }