我正在编写一些依赖于 StructureMap 的单元测试,所以我想在我的 [SetUp] 方法中完全重置 ObjectFactory。这就是我的 [SetUp] 方法现在的样子:
[SetUp]
public void SetUp()
{
ObjectFactory.Initialize(initializationExpression => {});
}
这似乎重置了配置,因为我可以执行 ObjectFactory.WhatDoIHave() 方法并且它不包含我的任何配置。但是,缓存的对象实例不会被删除,而是在后续测试中返回。有没有办法完全重置 ObjectFactory?
我想我可能不得不使用 ObjectFactory.EjectAllInstancesOf(),但这似乎没有帮助。
我使用的是 2.5.3 版。
这是一些人为的代码来显示我在说什么。我希望这个测试能够通过,但事实并非如此。
[TestFixture]
public class TestingStructureMap
{
[Test]
public void FirstTestUsingCachedObjects()
{
ObjectFactory.Configure(configure =>
configure.ForRequestedType<ISomeInterface>()
.TheDefaultIsConcreteType<SomeImplementation>()
.CacheBy(InstanceScope.ThreadLocal)
);
ISomeInterface firstSomeInterface = ObjectFactory.GetInstance<ISomeInterface>();
Assert.AreEqual(1, firstSomeInterface.ID);
ObjectFactory.Initialize(initializationExpression => { });
ObjectFactory.EjectAllInstancesOf<ISomeInterface>();
ObjectFactory.Configure(configure =>
configure.ForRequestedType<ISomeInterface>()
.TheDefaultIsConcreteType<SomeImplementation>()
.CacheBy(InstanceScope.ThreadLocal)
);
ISomeInterface secondSomeInterface = ObjectFactory.GetInstance<ISomeInterface>();
Assert.AreEqual(2, secondSomeInterface.ID);
}
public interface ISomeInterface
{
int ID { get; }
}
public class SomeImplementation : ISomeInterface
{
private static int NumberOfInstancesCreated;
private readonly int id;
public int ID
{
get { return id; }
}
public SomeImplementation()
{
id = ++NumberOfInstancesCreated;
}
}
}