StructureMap を使用して、同じタイプの 2 つのインスタンスを 2 つの異なるスレッドに格納しようとしています。各スレッドには独自のインスタンスが必要です。
[TestMethod]
public void ThatObjectFactoryReturnsDifferentTypesFromTwoThreadsWhenConfiguredThreadLocalStorage()
{
var t = new Thread(ConfigureThreadLocalStorageTest1);
ITestObjectFactory test2 = new Test2();
ObjectFactory.Configure(x => x.For<ITestObjectFactory>().LifecycleIs(new ThreadLocalStorageLifecycle()).Use(test2));
t.Start();
t.Join();
test2 = ObjectFactory.GetInstance<ITestObjectFactory>();
Assert.IsInstanceOfType(test2, typeof(Test2));
Assert.IsInstanceOfType(_staticTest, typeof(Test1));
}
static void ConfigureThreadLocalStorageTest1()
{
System.Diagnostics.Debug.WriteLine(ObjectFactory.TryGetInstance<ITestObjectFactory>());
ITestObjectFactory test1 = new Test1();
ObjectFactory.Configure(x => x.For<ITestObjectFactory>().LifecycleIs(new ThreadLocalStorageLifecycle()).Use(test1));
_staticTest = ObjectFactory.GetInstance<ITestObjectFactory>();
}
}
public class Test2 : ITestObjectFactory
{
}
public class Test1 : ITestObjectFactory
{
}
public interface ITestObjectFactory
{
}
ただし、上記のテストは失敗します。また、LifecycleIs(new ThreadLocalStorage()) 構成を使用すると、ConfigureThreadLocalStorageTest1 の ObjectFactory.GetInstance() メソッドが null を返すと思いますか?