在我的Web应用程序中,我已经将StructureMap配置为根据HTTP请求确定单个数据库会话的范围。
For<ISession>()
.HybridHttpOrThreadLocalScoped()
.Use(context => /* construct the session here */);
我现在有另一个类,每次构建它时都需要一个全新的会话。
public class NewClass
{
public NewClass(ISession session)
{
/* do some stuff with the session */
}
}
如何配置StructureMap,以便在我调用ObjectFactory.GetInstance<NewClass>()
时,每次都会获得一个新会话?我希望保持默认行为不变,以便我的所有其他类都为每个请求留下一个会话。
答案 0 :(得分:1)
StructureMap有一个built in limitation,因为注册的接口只能有一个生命周期。您需要通过为ISession
提供两个不同的接口来解决此问题:
conf.For<INewSession>().Use(context => ...);
conf.For<ISession>().HybridHttpOrThreadLocalScoped().Use(context => ...);
其中NewClass
将INewSession
作为依赖项和
interface INewSession : ISession