StructureMapで実行されているデコレータパターンの非常に単純なバージョンを取得しようとしていますが、機能させることができません。これが私のコードです(ブレークポイントに注意してください):
public interface ITestClass { void DoSomething(); }
public class TestClass : ITestClass
{
public void DoSomething()
{
Console.WriteLine("Doing something"); //Breakpoint
}
}
public class LoggingTestClass : ITestClass
{
private ITestClass originalClass;
public LoggingTestClass(ITestClass original)
{
originalClass = original; //Breakpoint
}
public void DoSomething()
{
Console.WriteLine("Log start");
originalClass.DoSomething();
Console.WriteLine("Log finish");
}
}
そして私のレジストリで:
For<ITestClass>().Use<TestClass>().
EnrichWith(original => new LoggingTestClass(original));
そして最後にテスト:
[TestMethod]
public void DoSomeTesting()
{
using (IContainer container = new Container(new ApiRegistry()))
{
ITestClass testClass = container.GetInstance<TestClass>(); //Breakpoint
testClass.DoSomething();
}
}
テストをデバッグするときは、最初にテストのブレークポイントに到達し、次にDoSomething()メソッドのブレークポイントに到達します。LoggingTestClassのコンストラクターは実行されません。
どうすればそれをさらに単純化できるかわかりません。EnrichWithは単に呼び出されていないようです...