質問:イベントを使用してこのログコードを構成する簡単な方法はありますか?Loggerを使用したデリゲートとイベントのアーキテクチャ
コードは、@ JonSkeetsの偉大な話(www.tekpub.com)からインスピレーションを得ました。理解のすべての誤りは私のものです。
internal class Program
{
private static void Main(string[] args)
{
Person p = new Person();
p.GetDefaultName();
}
}
public delegate void LogHandler(string message);
public class Person
{
public void GetDefaultName()
{
LogEventRaiser raiser = SetupLogEventRaiser();
raiser.OnLog("getting default name");
}
private static LogEventRaiser SetupLogEventRaiser()
{
ConsoleLogger cl = new ConsoleLogger();
ConsoleLogger2 cl2 = new ConsoleLogger2();
//when delegate LogHander is called, run fileLogger.Logger method
LogHandler handler = cl.Logger;
LogHandler handler2 = cl2.Logger;
var raiser = new LogEventRaiser();
//wire up event called Log which is of type delegate LogHandler
raiser.Log += handler;
raiser.Log += handler2;
return raiser;
}
}
public class LogEventRaiser
{
public event LogHandler Log;
public void OnLog(string text)
{
LogHandler tmp = Log;
if (tmp != null)
tmp.Invoke(text);
}
}
public class ConsoleLogger
{
public void Logger(string s)
{
Console.WriteLine("ConsoleLogger: " + s);
}
}
public class ConsoleLogger2
{
public void Logger(string s)
{
Console.WriteLine("ConsoleLogger2: " + s);
}
}
質問は何ですか? – PeeHaa
Jonから多くの影響を受け、実際のqをほとんど忘れてしまったのでしょうか? ;) – Zenwalker
:-)はい私はこの質問では少し曖昧だった(そして午前)。ちょうど私が正しいことについてのアーキテクチャを持っていると感じるようにしようとしています。リファクタリングして簡単にしようとしています。 –