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;
}
}
}