明确指定StructureMap生命周期

时间:2013-08-05 10:55:45

标签: c# structuremap

在我的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>()时,每次都会获得一个新会话?我希望保持默认行为不变,以便我的所有其他类都为每个请求留下一个会话。

1 个答案:

答案 0 :(得分:1)

StructureMap有一个built in limitation,因为注册的接口只能有一个生命周期。您需要通过为ISession提供两个不同的接口来解决此问题:

conf.For<INewSession>().Use(context => ...);
conf.For<ISession>().HybridHttpOrThreadLocalScoped().Use(context => ...);

其中NewClassINewSession作为依赖项和

interface INewSession : ISession