using System;
namespace LoggerTest
{
class Program
{
static void Main(string[] args)
{
var typeA = new Logger(() => new WriterTypeA());
var typeB = new Logger(() => new WriterTypeB());
typeA.Write("test1");
typeB.Write("test2");
Console.WriteLine("何かキーを押してください。");
Console.ReadKey();
}
public class Logger
{
private Func<IWriter> _cWriter;
public Logger(Func<IWriter> cWriter)
{
this._cWriter = cWriter;
}
public void Write(string s)
{
using (var writer = this._cWriter())
{
writer.Write(s);
}
}
}
public interface IWriter : IDisposable
{
void Write(string s);
}
public class WriterTypeA : IWriter
{
public WriterTypeA()
{
Console.WriteLine($"WriterTypeA:Constructor");
}
public void Write(string s)
{
Console.WriteLine($"WriterTypeA:{s}");
}
public void Dispose()
{
Console.WriteLine($"WriterTypeA:Dispose");
}
}
public class WriterTypeB : IWriter
{
public WriterTypeB()
{
Console.WriteLine($"WriterTypeB:Constructor");
}
public void Write(string s)
{
Console.WriteLine($"WriterTypeB:{s}");
}
public void Dispose()
{
Console.WriteLine($"WriterTypeB:Dispose");
}
}
}
}