1

私はASP.NET MVC 4 application + NHibernate/Fluent NHibernate + Ninjectアプリケーションに取り組んでいます。

以下のISessionとの依存関係を解決するために、別のモジュールを作成しました。ISessionFactory

  public class RepositoryModule: NinjectModule
  {
    public override void Load()
    {
      Bind<ISessionFactory>()
        .ToMethod(e => Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.FromConnectionStringWithKey("DbConnString")))
        .Cache(c => c.UseQueryCache().ProviderClass<HashtableCacheProvider>())
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Post>())            
        .BuildConfiguration()
        .BuildSessionFactory())
        .InSingletonScope();

      Bind<ISession>()
        .ToMethod((ctx) => ctx.Kernel.Get<ISessionFactory>().OpenSession())
        .InRequestScope();
    }
  }

BlogRepositoryを実装するリポジトリクラスがありますIBlogRepository

  public class BlogRepository : IBlogRepository
  {
    private readonly ISession _session;

    public BlogRepository(ISession session)
    {
      _session = session;
    }

    public IList<Post> Posts(int pageNo, int pageSize)
    {
      var query = _session.Query<Post>()
                          .Where(p => p.Published)
                          .OrderByDescending(p => p.PostedOn)
                          .Skip(pageNo * pageSize)
                          .Take(pageSize)
                          .Fetch(p => p.Category);

      query.FetchMany(p => p.Tags).ToFuture();

      return query.ToFuture().ToList();
    }

    // others
  }

BlogRepositoryカスタムモデルバインダーのインスタンスが必要です。

Global.asax.csでこのようなことを試しました。

ModelBinders.Binders.Add(typeof(Post), new PostModelBinder(Kernel.Get<IBlogRepository>()));

最初のリクエストではすべてが正常に機能しますが、2番目のリクエストからは

セッションは閉じられましたエラー

。助言がありますか?

4

1 に答える 1