我正在尝试使用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根本就没有被调用......
答案 0 :(得分:0)
GetInstance<TestClass>
而不是GetInstance<ITestClass>
。那个小小的我让我忙了几个小时!关于你的商界人士。