使用Windsor和NHibernate配置应用程序的Asp MVC问题

Edu*_*ard 2 c# nhibernate castle-windsor facilities

我有使用windsor,设施和nhibernate配置应用程序的问题.

我得到这个例外:

ObjectDisposedException: Session is closed   
Run Code Online (Sandbox Code Playgroud)

不应该windsor负责每个请求实例化会话,并在我有这样的配置时打开它?我可以错过一些配置吗?这是我的承认:

public class PersistenceFacility : AbstractFacility
{

    protected override void Init()
    {
        Configuration config = BuildDatabaseConfiguration();

        Kernel.Register(
            Component.For<ISessionFactory>()
                .LifeStyle.Singleton
                .UsingFactoryMethod(config.BuildSessionFactory),
            Component.For<ISession>()
                .LifeStyle.PerWebRequest
                .UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession()));
    }

    private Configuration BuildDatabaseConfiguration()
    {
        return Fluently.Configure()
            .Database(SetupDatabase)
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<RnUlice>())
            .ExposeConfiguration(ConfigurePersistence)
            .BuildConfiguration() ;
    }
   ......
}
Run Code Online (Sandbox Code Playgroud)

Mau*_*fer 7

如果您Repository<T>在其构造得到一个ISession的,它的单(默认的生活方式),那么它只会在你打电话给库中的第一个请求工作.在随后的请求库仍会有相同的ISession在第一次调用(因为库是单身),但会议已经结束的和无效使用,所以你看到的错误.

这就是为什么大多数时候你不想要单身取决于具有"更短"生活方式的其他组件(如每个网络请求或瞬态).

有关常见生活方式问题的更全面分析,请参阅此文章.