2011-04-11 116 views
39

有誰知道postharp的開源替代多數民衆贊成在易於使用和支持基於屬性的東西嗎?我見過的AspectDNG稍微類似,但創建這些屬性就像C++代碼,並需要一種不同的編譯形式開源替代postSharp,支持簡單的自定義屬性

我知道windsor,ninject,Spring.Net等,但他們都沒有像postsharp自定義屬性。

我正在尋找一些程序,可以讓我在事件發生之前使用自己的自定義屬性。

我將不勝感激任何建議。

謝謝

編輯:這個問題的專門描述,它應該支持的屬性還沒有被問過這些問題。所以,請不要關閉這個問題。這不是重複的。

編輯:我爲什麼害怕postsharp? PostSharp迄今爲止是最好的,但它是商業和使用免費版本的大型項目看起來不確定/風險。我們永遠不知道他們什麼時候可能會停止他們的免費版本。

編輯:感謝所有的投票和最喜歡的補充。到目前爲止,我已經找到了這個:http://zinject.codeplex.com/但它是法文的。請提供更多建議,如果你們中的任何人發現其他事情。

+0

可能dublicate http://stackoverflow.com/questions/1826724/any-postsharp-alternative – 2011-04-11 13:32:04

+1

你想用PostSharp不能爲你做的OpenSource產品做什麼?社區(或即將成爲dtarter)版本可以做很多,而且是免費的。事件是唯一的事情嗎? – 2011-04-11 13:34:33

+1

MEF會爲你想達到的目標而工作嗎? – grzeg 2011-04-11 13:36:26

回答

5
+16

這些是[霍布森的選擇](http://en.wikipedia.org/wiki/Hobson's_choice)。 – toddmo 2015-03-20 19:07:48

+1

另一種選擇是[NCop](https://github.com/sagifogel/NCop)受postsharp啓發的面向複合方面的框架。 – Sagi 2015-09-02 22:15:13

+0

對於你們投票的那些人,記住這個帖子真的很老了。 – 2017-07-17 19:00:46

6

CciSharp是一個另類。像PostSharp一樣,它是使用屬性的後編譯IL重寫器。

+3

+1很好的答案。但請記住這些問題:CciSharp需要有關MSIL的高級知識。請注意,在MSIL中編寫原型相當容易,但要編寫適用於各種情況的轉換要困難得多。你將永久地重新發明輪子。 MSIL轉換庫通常非常低級,它們不提供PostSharp SDK的高級功能。當許多應用於相同的方法時,以這種方式實施的轉換通常不能很好地組合。 – 2011-04-11 15:18:50

+0

@Dustin:我完全同意。此外,CciSharp基於CCI Meta庫,該庫定期進行重大更改。 – 2011-04-11 15:21:52

+0

[CodeCop](http://getcodecop.com/)是一個建立在JSON之上的庫,爲.NET應用程序編寫方法攔截器提供了一種快速而不顯眼的方式。 [Here](https://bitbucket.org/codecop_team/codecop/wiki/Home)是一個wiki。 你可以試試:) – 2015-09-03 14:26:12

14

我們剛剛發佈Afterthought。從文檔:

有感允許開發人員進行後期處理.NET程序集添加,要麼不能被添加到原始來源或不方便/高效這麼做代碼。例子包括:

  1. 調整編譯的程序集,而您沒有源代碼中必須支持/修改
  2. 添加設備邏輯來組裝用於測試目的,它不會永遠的發行版本的一部分
  3. 實現繁瑣的接口或模式,在直接實現時會影響編碼工作的簡單性。

那麼,Afterthought做什麼?很簡單,它可以讓你:

  1. 通過繼承修訂<創建類型的修正,>描述你想
  2. 屬性添加到您的類型的指示修改哪些類型,哪些修改申請
  3. 什麼變化
  4. 通過添加新的屬性或修改現有屬性的邏輯
  5. 通過添加新的方法修改方法或修改的現有方法的邏輯
  6. 通過添加新的構造或米修改構造修改屬性減少現有構造函數的邏輯
  7. 直接在利用現有屬性/方法的類型上實現接口,添加新的屬性/方法,並允許Afterthought自動實現其他所有功能 配置項目以將Afterthought作爲構建後應用步驟變化
+1

但我需要創建屬性並將其應用於我的方法,就像我可以使用postsharp一樣。在您的文檔中,我沒有看到類似這樣的方法輸入,退出事件等。你有這樣的功能嗎? – Josh 2011-04-13 04:47:02

+0

不用擔心!我在github上添加了一個[issue](https://github.com/vc3/Afterthought/issues/7),可以向你保證,我們應該儘快實施它。同時,請隨時下載源代碼並嘗試一下,我們希望有更多的貢獻者/測試者! – 2011-04-13 13:17:00

+1

..現在它支持添加屬性..快樂編碼! – 2011-04-14 19:17:41

1

一個很好的選擇是http://www.gripper-loom.net/

+3

你能解釋一下爲什麼嗎? – 2012-10-19 21:18:33

+0

只需查看一下,該庫/工具集似乎是專門針對全面的AOP開發而設計的,其充分的學術靈感解決方案具有必要的複雜性。事後考慮似乎是一個更好的選擇,因爲它的進入門檻要低得多,如果/當它不能做到你需要的時候,那麼考慮更多的準系統。只要我的$ 0.02 :-) – 2013-07-16 23:06:07