簡介
ALinq Inject 是我的又一開源項目,之前已經開源了兩個作品:
這兩個開源項目都是托管在 CodePlex 上,而 ALinq Inject 是我本年度的第三個開源項目了。這個項目,我花了幾個月的時間去構思,然后再花了差不多一個月的時間去編寫,非常不容易,如果你對此感興趣,請點擊一下推薦按鈕,也就舉手之勞。
在 Linq to SQL 上使用 AOP 有什么好處?好處太多了。下面列舉幾個常見的應用情景,在這些情景中,應用AOP,可以使用代碼更為優雅。
1、數據的驗證
2、操作日志
3、數據更新的記錄。
特點
簡單易用,ALinq Inject 目前能夠注入到添加、刪除、更新、驗證四個方法,下一步將支持查詢的注入。
使用
1、Linq to SQL 用戶,引用 System.Data.Linq.Inject.dll 程序集,如果是 ALinq 用戶,則引用 ALinq.Inject.dll 。
2、創建 HandlerAttribute 的繼承類,實現注入。如下:
class LoggerAttribute : HandlerAttribute { public override void OnUpdateBegin(object entity, HandlerArguments args) { Console.WriteLine("============== Begin Update ===================="); } public override void OnUpdateSuccess(object entity, HandlerArguments args) { Console.WriteLine("============== Update Success ===================="); } public override void OnUpdateFail(object entity, HandlerExceptionArguments args) { Console.WriteLine("============== Update Fail ===================="); Console.WriteLine(args.Exception.Message); args.Processed = true; Console.WriteLine("==============================================="); } public override void OnUpdateEnd(object entity, HandlerArguments args) { Console.WriteLine("============== Update End ===================="); } }
3、在 DataContext 上類上,加上 LoggerAttribute
[Logger] partial class NorthwindDatabase { }
4、使用 InjectMappingSource 類,替代原來的 MappingSource(AttributeMappingSource 或 XmlMappingSource)
var mappingSource = new InjectMappingSource(); var db = new NorthwindDemo.NorthwindDatabase(conn, mappingSource) { Log = Console.Out }; var c = db.Categories.First(); c.CategoryName = c.CategoryName + "x"; db.SubmitChanges();
5、運行后輸出的結果
SELECT TOP (1) [t0].[Category ID] AS [CategoryID], [t0].[Category Name] AS [CategoryName], [t0].[Description], [t0].[Picture] FROM [Categories] AS [t0] -- Context: SqlProvider(SqlCE) Model: ProxyMetaModel Build: 4.0.30319.17929 ============== Begin Update ==================== UPDATE [Categories] SET [Category Name] = @p1 WHERE [Category ID] = @p0 -- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [1] -- @p1: Input String (Size = 0; Prec = 0; Scale = 0) [Beveragesxxxx] -- Context: SqlProvider(SqlCE) Model: ProxyMetaModel Build: 4.0.30319.17929 ============== Update Success ==================== ============== Update End ====================
從輸出的結果可以看得到,已經成功注入了。 點擊這里下載 ALinq Inject 點擊這里下載示例
感興趣的朋友,請點擊推薦(舉手之勞,哥寫這個框架可是幾個月呀),推薦數超過 100 了,我就繼續發詳細的教程,還有代碼。
教程在這里。
Linq to SQL 也來AOP 之 —— ALinq Inject 使用指南