参照html
http://www.cnblogs.com/GreedyL/p/7474368.htmlweb
思路:ui
1、建立ActionFilter拦截请求,在拦截器中注入IUOW,IUOW里面注入IDbContext,借助EF的commit自带的事务来实现事务处理spa
2、Action中调取一组业务服务层IService,IService里面注入IRepository(IRepository里面注入了IDbContext)
3、事务实现的关键在于IUOW与Irepository中的IdbContext为同一个对象。这个是经过Autofac中的InstancePerLifetimeScope来实现component
builder.RegisterType<HouseManageObjectContext>().As<IDbContext>().InstancePerLifetimeScope();orm
4、InstancePerLifetimeScope相似于变量的做用域同样。在首个注入的对象的做用域内,再遇到注入情形时,不会注入,直接应用以前已经注入的对象。htm
这个做用域适用于嵌套的生命周期。一个使用Per Lifetime 做用域的component在一个 nested lifetime scope内最多有一个实例。
当对象特定于一个工做单元时,这个很是有用。好比,一个HTTP请求,每个工做单元都会建立一个nested lifetime,若是在每一次HTTP请求中建立一个nested lifetime,那么其余使用 per-lifetime 的component在每次HTTP请求中只会拥有一个实例。
这种配置模型在其余容器中等价于per-HTTP-request, per-thread等。
builder.RegisterType<X>().InstancePerLifetimeScope();
的ASP.NET
和WCF集成中,每一次web请求或者方法调用,InstancePerLifetimeScope会被默认附加到component上对象
代码详情参见housemanage项目和chinabeacon.data sdkblog