我很难弄清楚如何让 StructureMap 缓存一个非默认实例。我可以用这样的代码缓存默认实例
ForRequestedType<ISession>()
.CacheBy(InstanceScope.HttpContext)
.TheDefault.Is.ConstructedBy(() => ObjectFactory.GetInstance<ISessionFactory>().OpenSession());
按预期工作。我可以很好地创建一个命名实例
InstanceOf<User>().Is.ConstructedBy(() => someAwesomeConstructor()).WithName("CurrentUser");
但是我真的很想按会话缓存“CurrentUser”,但是 .CacheBy() 只存在于 CreatePluginFamilyExpression<> 中,我可以告诉从 CreatePluginFamilyExpression<> 到 IsExpression<> 的唯一方法是通过属性 TheDefault,它强制我创建一个我不想要的默认值。