2012-11-29 44 views
1

我想要一個新的我的對象實例用於與StructureMap的每個ObjectFactory.Getinstance()調用。我一直無法找到它或自己弄清楚。如何在StructureMap中爲每個請求獲取新實例?

AlwaysUnique沒有這樣做。

[TestMethod] 
public void GetConcreteInstanceOf_ShouldReturn_DifferentInstance() 
{ 
    ObjectFactory.Initialize(registry => 
    { 
    // setup the singleton, so that it's new every time 
    registry.For<ISystemData>().AlwaysUnique().Use(new SystemDataClient()); 
    }); 

    ISystemData result = ObjectFactory.GetInstance<ISystemData>(); 
    ISystemData result2 = ObjectFactory.GetInstance<ISystemData>(); 
    Assert.AreNotSame(result, result2); 
} 

回答

3

如果你每次想要一個新的實例,那麼你不需要一個單例,按照定義。相反,通過一個實例,只需指定具體類型,每一次StructureMap的默認行爲會給你一個新的實例:

registry.For<ISystemData>().Use<SystemDataClient>(); 
+0

不是'registry.For ()。在這種情況下使用();'足夠嗎?爲什麼要打擾lambda表達式? –

+0

當然可以。這就是我沒有想到打字時得到的......謝謝,糾正了。 –

0

如果你有一個貪婪的構造函數,與已接受的答案干擾,你也可以使用這個:

registry.For<ISystemData>().Use(() => new SystemDataClient()); 
相關問題