我正在开发一个ASP.NET MVC 4 application + NHibernate/Fluent NHibernate + Ninject
应用程序。
我创建了一个单独的模块来解决下面ISession
和ISessionFactory
s 的依赖关系,
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>()));
在第一个请求时一切正常,但从第二个请求我得到
会话关闭错误
. 有什么建议么?