參照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