我有一個使用StructureMap的ASP.NET MVC應用程序。StructureMap和HTTP請求範圍的服務 - 爲什麼我的服務在單一範圍內創建兩次?
我已經創建了一個名爲SecurityContext的服務,它具有靜態Current屬性。一個簡化的版本是這樣的:
public class SecurityContext : ISecurityContext
{
public bool MyProperty { get; private set; }
public static SecurityContext Current
{
get
{
return new SecurityContext() { MyProperty = true };
}
}
}
我已經在我的StructureMap註冊表如下迷上這件事:
For<ISecurityContext>().Use(() => SecurityContext.Current);
我的使用方法,這個LINQ表達式超載的理解是,返回的具體對象對於整個HTTP請求範圍是相同的。
但是,我設置了一個測試用例,其中我的上下文接口在兩個位置注入,一次在控制器的構造函數中,並且在我的視圖繼承的基類中再次使用SetterProperty
屬性。
當調試時,我觀察到Current
靜態方法被擊中兩次,所以我的假設是錯誤的。任何人都可以糾正我在這裏做什麼?我想要這個請求範圍的原因是因爲我從數據庫中將某些數據加載到我的上下文類中,所以我不希望這種情況在給定頁面加載時發生多次。
在此先感謝。
加上從StructureMap作者(我) –
謝謝你們。作品一種享受。我可以問,當你說'傳統'時,這是否意味着HttpContext生命週期將會過時?如果是這樣,將使用什麼? – getsetcode