概述
我正在尝试连接 Autofac 以帮助管理ISession
我的 MVC 4 RC 项目中的 NHibernate。据我了解,Autofac 应该ISession.Dispose
在每个 HTTP 请求结束时按照我配置的方式调用(见下文)。但是,情况似乎并非如此——如果我不调用ISession.Flush()
,则数据不会保存在数据库中。
配置
自动法
container.Register(c => DbConfig.Generate(connectionString).BuildSessionFactory())
.As<ISessionFactory>()
.SingleInstance();
container.Register(c => c.Resolve<ISessionFactory>().OpenSession())
.As<ISession>()
.InstancePerLifetimeScope();
container.RegisterGeneric(typeof(Repository<>))
.As(typeof(IRepository<>))
.InstancePerLifetimeScope();
存储库
public class Repository<T> : IRepository<T> where T : class
{
protected readonly ISession Session;
public Repository(ISession session)
{
Session = session;
}
public void Add(T entity)
{
Session.Save(entity);
}
}
数据库种子 (Application_Start)
public class DatabaseSeed
{
public static void Seed(IContainer container)
{
var session = container.Resolve<ISession>();
var userRepo = container.Resolve<IRepository<User>>();
userRepo.Add(new User { Id = 5, Name = "Test User" });
//session.Flush(); <-- if not called, user will not be persisted!
}
}
结束语
我确实知道我应该将其包装在交易中。但是,我想在进入更复杂的场景之前先了解基础知识,并且很困惑为什么上述内容不能按我预期的方式工作......
(附带说明一下,我尝试运行 Whitebox,即 Autofac 的“分析器”,但它在我身上失败了,但有一些例外(发布在 Autofac 组@Google 上),所以我不完全确定是 Autfac 在取笑我还是NHibernate :-)