Ich schreibe einige Komponententests, die auf StructureMap basieren, also möchte ich die ObjectFactory in meiner [SetUp] -Methode vollständig zurücksetzen. Dies ist, was meine [SetUp] Verfahren wie jetzt aussehen:Reset ObjectFactory in StructureMap
[SetUp]
public void SetUp()
{
ObjectFactory.Initialize(initializationExpression => {});
}
Dies scheint die Konfiguration zurückgesetzt, weil ich die ObjectFactory.WhatDoIHave() -Methode ausführen kann und es nicht jede meiner Konfiguration enthält. Objekte im Cache werden jedoch nicht entfernt und in nachfolgenden Tests zurückgegeben. Gibt es eine Möglichkeit, komplett die ObjectFactory zurücksetzen?
Ich dachte, ich müsste möglicherweise ObjectFactory.EjectAllInstancesOf() verwenden, aber das scheint nicht zu helfen.
Ich benutze Version 2.5.3.
Hier ist ein erfundener Code, um zu zeigen, worüber ich rede. Ich würde erwarten, dass dieser Test bestanden wird, aber das tut es nicht.
[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;
}
}
}
ich den Test, den ich über den Behälter zu verwenden, anstatt geschrieben geändert und es immer noch nicht. –
Das Erstellen des Containers ist ziemlich langsam aber langsam ... – Andrew