Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fluent nhibernate 每个请求具有Funq和FuentNHibernate会话的ServiceStack_Fluent Nhibernate_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Funq - Fatal编程技术网 servicestack,funq,Fluent Nhibernate,servicestack,Funq" /> servicestack,funq,Fluent Nhibernate,servicestack,Funq" />

Fluent nhibernate 每个请求具有Funq和FuentNHibernate会话的ServiceStack

Fluent nhibernate 每个请求具有Funq和FuentNHibernate会话的ServiceStack,fluent-nhibernate,servicestack,funq,Fluent Nhibernate,servicestack,Funq,我试图在ServiceStack中使用FluentNHibernate,并在每个请求的会话基础上使用Funq IoC容器,我遇到了一个问题,在对我的服务的第二个请求中,我得到了一个ObjectDisposedException。Funq不应该为每个请求创建一个新会话吗 我的理解是,通过在Funq中使用ReusedWithin(ReuseScope.Request),每个请求都会得到一个新的ISession,但这只发生在第一个请求中。在我的AppHost中,我有以下内容: public stati

我试图在ServiceStack中使用FluentNHibernate,并在每个请求的会话基础上使用Funq IoC容器,我遇到了一个问题,在对我的服务的第二个请求中,我得到了一个ObjectDisposedException。Funq不应该为每个请求创建一个新会话吗

我的理解是,通过在Funq中使用ReusedWithin(ReuseScope.Request),每个请求都会得到一个新的ISession,但这只发生在第一个请求中。在我的AppHost中,我有以下内容:

public static NH.ISession CurrentSession
    {
        get
        {
            SessionFactory = GetFactory();
            NH.ISession session = SessionFactory.OpenSession();
            return session;
        }
    }

    private static NH.ISessionFactory GetFactory()
    {
        return Fluently.Configure().Database(MsSqlConfiguration.MsSql2008
            .ConnectionString(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString)).Mappings(m =>
            { m.FluentMappings.AddFromAssemblyOf<Case>(); })
            .BuildSessionFactory(); 
    }
公共静态NH.ISession当前会话
{
得到
{
SessionFactory=GetFactory();
NH.ISession session=SessionFactory.OpenSession();
返回会议;
}
}
私有静态NH.ISessionFactory GetFactory()
{
流畅地返回.Configure().Database(MsSqlConfiguration.MsSql2008
.ConnectionString(ConfigurationManager.ConnectionString[“DefaultConnection”].ConnectionString)).Mappings(m=>
{m.FluentMappings.AddFromAssemblyOf();})
.BuildSessionFactory();
}
以及在货柜上的登记:

            container.Register<NH.ISession>(c => CurrentSession).ReusedWithin(Funq.ReuseScope.Request);
            container.Register<ILog>(c => LogManager.GetLogger(GetType()));  
container.Register(c=>CurrentSession.ReusedWithin(Funq.ReuseScope.Request);
container.Register(c=>LogManager.GetLogger(GetType());

所以我找到了我的问题所在。在Funq中为NHibernate ISession使用每个请求的请求作用域时,请确保依赖它的其他服务也在每个请求的作用域内,或者在下一个请求中处理它们的支持依赖项(本例中为ISession)。我将集装箱注册更改为以下内容:

container.Register<NH.ISession>(c => CurrentSession).ReusedWithin(Funq.ReuseScope.Request);
            container.Register<ILog>(c => LogManager.GetLogger(GetType()));
            container.Register<IRequestService>(c => new Services.RequestService(c.Resolve<NH.ISession>(), c.Resolve<ILog>())).ReusedWithin(Funq.ReuseScope.Request);
container.Register(c=>CurrentSession.ReusedWithin(Funq.ReuseScope.Request);
container.Register(c=>LogManager.GetLogger(GetType());
container.Register(c=>newservices.RequestService(c.Resolve(),c.Resolve()).ReusedWithin(Funq.ReuseScope.Request);
关键是请求服务还必须按请求确定作用域