私は[SetUp]メソッドでObjectFactoryを完全にリセットしたいので、StructureMapに依存する単体テストをいくつか書いています。私の[設定]の方法は、今のように見えるものです:StructureMapのObjectFactoryをリセットする
[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;
}
}
}
私は私が代わりにコンテナを使用するために、上記の投稿のテストを修正し、それはまだ失敗:
これは動作しません。 –
コンテナを再作成するのはかなり遅いです... – Andrew