我很難搞清楚如何讓StructureMap緩存一個非默認實例。我可以用這樣的代碼緩存默認實例使用StructureMap來緩存命名實例
ForRequestedType<ISession>()
.CacheBy(InstanceScope.HttpContext)
.TheDefault.Is.ConstructedBy(() => ObjectFactory.GetInstance<ISessionFactory>().OpenSession());
它按預期工作。我可以創建一個命名實例細
InstanceOf<User>().Is.ConstructedBy(() => someAwesomeConstructor()).WithName("CurrentUser");
但我真的想通過會話緩存「當前用戶」,但.CacheBy()只在CreatePluginFamilyExpression <存在>的唯一途徑,我可以告訴從得到 CreatePluginFamilyExpression <> IsExpression <>是由屬性TheDefault,這迫使我創建一個默認,我不想。
在這種情況下,它非常好。我只有一個「特殊」實例,所以只有一個緩存範圍不是問題。我只是不想要一個默認實例,因爲如果他們把一個用戶放在構造函數中並突然將當前用戶從無處剔除,可能會使某人感到困惑。 – 2009-04-13 14:34:44