我正在使用StructureMap 2.6.4.0。我使用它的主要目標是簡化我的測試。根據StructureMap文檔(here),它對於臨時模擬注入具有很好的功能(ObjectFactory.Inject <>())。ResetDefaults()方法在StructureMap中不起作用
糾正我,如果我錯了,但這裏是我該功能的理解:
- 您有映射到其接口的所有「真實」的實施有你的容器配置的代碼在一個地方。
- 在每次測試運行之前,根據應用程序的相同代碼初始化ObjectFactory。
- 如果任何測試需要使用「測試」來替換某個「真實」實現,那麼它會在ObjectFactory上使用Inject方法注入「test」implpementation。
- 要恢復原始映射並刪除注入模擬,您需要調用ResetDefaults()。
而我的問題是,在第4步。
這裏是一個代碼示例,該數字我的問題:
public interface IValueProvider
{
string GetValue();
}
public class ValueProvider : IValueProvider
{
public string GetValue()
{
return "Value provider";
}
}
public class TestValueProvider : IValueProvider
{
public string GetValue()
{
return "Test value provider";
}
}
class Program
{
static void Main(string[] args)
{
ObjectFactory.Initialize(x => x.For<IValueProvider>().Use<ValueProvider>());
var valueProvider = ObjectFactory.GetInstance<IValueProvider>();
Console.WriteLine(valueProvider.GetValue());
// I will see expected "Value provider"
ObjectFactory.Inject<IValueProvider>(new TestValueProvider());
valueProvider = ObjectFactory.GetInstance<IValueProvider>();
Console.WriteLine(valueProvider.GetValue());
// I will see expected "Test value provider"
ObjectFactory.ResetDefaults();
valueProvider = ObjectFactory.GetInstance<IValueProvider>();
Console.WriteLine(valueProvider.GetValue());
// I will see NOT expected "Test value provider".
// Doesn't ResetDefaults() have to restore a ValueProvider implementation?
}
}
所以,可能有人告訴我,我錯了?或者它可能是StructureMap中的一個錯誤?