2014-10-08 105 views
0

目前正在使用的結構圖用於注射的transactionId這是一個uniqie GUID,它需要每次StructureMap初始化問題

x.For<ITransaction>() 
.Use<Transaction>() 
.Ctor<string>("transactionId").Is(Guid.NewGuid().ToString()) 
.Ctor<string>("transactionType").Is(settings["TransactionTypeValue"]); 

隨着控制器ITransaction被作爲參數傳遞和獲取TRANSACTIONID創建。 但是每當操作方法被調用時,我都沒有得到唯一的Guid。 它每次加載應用程序和相同的值時都會設置。 如何在每次使用結構圖配置調用操作方法時生成唯一的Guid。

回答

0

問題是,您只是將初始化容器時的值設置爲相同。嘗試設置是返回一個GUID的功能,如:

x.For<ITransaction>() 
.Use<Transaction>() 
.Ctor<string>("transactionId").Is(() => Guid.NewGuid().ToString()) 
.Ctor<string>("transactionType").Is(settings["TransactionTypeValue"]); 
+0

非常感謝..工作就像一個charm.Please你能告訴我這是什麼功能是做。就是(()=> Guid.NewGuid () – Jammy123 2014-10-08 11:19:34

+0

@ Jammy123設置這些值時,該函數只執行一次(當你初始化你的容器時,通常在app啓動時),所以GUID.NewGuid只會被調用一次,而不是直接傳入一個值。是'.Is'的一個重載,它允許你傳入一個返回一個正確類型的變量的函數,然後每次你得到一個x的實例時調用該函數 – Anduril 2014-10-08 11:24:05

+0

感謝Anduril解釋這個.. – Jammy123 2014-10-08 11:28:32