2012-04-03 63 views
1

任何人都有運氣讓Ninject在MonoDroid上工作?我已經嘗試過從他們的網站2.0和4.0單聲道版本,也試過.net版本。Ninject和MonoDroid

隨着單建立我在快樂

+0

[Monodroid和ninject]的可能的重複(http://stackoverflow.com/questions/6337227/monodroid-and-ninject) – ctacke 2012-05-19 04:00:00

回答

5

我正在試用Ninject的WP7/Monotouch/Mono for Android項目,Ninject的工程出奇的好。

我使用了最新的資源,其中包含一個項目文件Ninject.WP7.csproj,它似乎已經過時。它包含了很多DefineConstants。我用這些常量創建了新的WP7/Monotouch/Mono for Android解決方案,並且編譯並運行了所有內容!

常量使用:

SILVERLIGHT,SILVERLIGHT_40,NO_LCG,NO_ASSEMBLY_SCANNING,NO_WEB,NO_PARTIAL_TRUST,NO_SKIP_VISIBILITY,NO_EXCEPTION_SERIALIZATION,NO_DEBUG_SYMBOLS 

不知道,如果都需要他們,但由於MonoTouch的/單聲道爲Android實現的Silverlight API的很大一部分Silverlight的一個非常重要。

當然,您無法使用Ninject創建Android活動。我主要將它用於構造函數注入,像ViewManager一樣創建.Net對象,使用存儲庫查看模型等等,這些是您使用依賴注入進行的常見操作。

+0

謝謝這應該有所幫助。我從來沒有在Mono之前編譯過一個.net項目。我假設你需要用單聲道版本替換參考文件?任何指導如何做到這一點? – 2012-05-20 00:11:00

+0

一個簡單的方法就是將Android類庫項目添加到您想要使用Ninject的Mono for Android項目中。然後將所有Ninject源文件添加到項目中。 (這是相當多的,所以要做到這一點,請以XML模式打開新的項目文件和Ninject.csproj文件,然後複製並粘貼ItemGroup)。 – 2012-05-20 13:10:53

+0

只需解壓縮源文件,右鍵單擊解決方案窗口並選擇「Include in Project」(只要您在解決方案資源管理器中選中第二個按鈕以顯示解決方案中的所有文件)。 – ashes999 2013-01-30 04:39:06

1

我沒有試圖讓Ninject工作我StandardKernel的實例得到一個MissingMethodException,但我會很驚訝,如果它只是工作開箱。如果有Ninject的Silverlight版本,你可能會有更多的運氣,但是沒有保證。在Mono for Android中獲得對它的支持的「最佳」方式是將代碼與Mono for Android配置文件構建爲類庫。

也就是說,還有其他選項用於在您的應用中執行服務位置。我有一個blog post up here,談論如何將TinyIoC和Funq用於服務位置。

+0

可以微小的IoC支持AOP?主要是通過一種方法掛鉤到對象的生命週期中,以便像日誌一樣包裝它。 如果不是你如何重建它?我假設你用Mono.Android替換了一些引用,但哪些是? – 2012-04-03 23:46:14

+0

Android並沒有真正提供掛鉤其對象生命週期的任何好方法,比如活動,所以容器最終被用於服務位置。如果你正在尋找AOP,我已經看到人們在Mono for Android應用程序中使用PostSharp,因爲它可以在編譯時工作,所以這可能對你有用。 – 2012-04-04 00:47:10

+0

從我所見過的大多數AOP生命週期中,基本上只是攔截一個方法並將其包裝。如果你圍繞一個Action包裝一個Try Catch塊,這基本上就是該方法的生命週期。問題是DI容器是否具有此構建並使您能夠在調用動作之前執行代碼 – 2012-04-04 23:57:14