天天看點

.NET下各種IoC架構對Xamarin的支援程式

在.NET的開發大環境中,IoC容器架構也有很多,其中較有名的有Autofac,CastleWindsor,Spring.NET,NInject,Unity和StructureMap。Xamarin是.NET下支援跨平台開發的一個很不錯的中間件,使用它,.NET開發人員可以使用它開發Android應用,iOS應用及UWP應用,而不需要再去學習Java(Android開發)、Object-C/Swift(iOS開發)。可以很大程式的降低.NET開發人員開發移動應用的成本。

開發中可以使用已有的.NET的各種現成架構,如IoC容器架構,日志架構等等。但哪些架構适用于Xamarin呢,經過部落客實踐得出,各種架構的使用情況如下:

1、Autofac

可以完善的支援Xamarin,并且支援屬性注入和構造函數注入。而且構造函數的值可以動态傳入。而且官方也明确表示了支援Xamarin。

2、Castle Windsor

雖然官方沒有明确表示,但經過部落客實踐,也是完美支援Xamarin的,但在構造函數注入時動态參數如果是null,會失敗。是以必須給定一個參數對象的執行個體。

3、Spring.NET

Spring.NET從2011年後基本沒有更新了,是以不适用Xamarin(.NET Standard)也很正常。是以它是完全不支援Xamarin的,并且由于Spring.NET完全借鑒了Java版的Spring架構,架構本身加入了大量的日志而引用了第三方庫,就更加不支援Xamarin了。

4、NInject

NInject官方也沒有表明支援Xamarin,但使用Xamarin建立的工程的UWP是可以運作的,但運作Android時,會在解析對象時報異常,TypeInitializationException。是以暫時認為它不支援Xamarin.Andriod和Xamarin.iOS,但支援Xamarin.UWP。

5、Unity

Unity微軟也将源碼托管到GitHub了,并且持續更新。它也完美支援Xamarin,雖然官方沒有明确表示。

6、StructureMap

它的代碼也托管到了GitHub,但從GitHub上看2.x版本後就不更新了(沒有Release了),但是實際上從NuGet安裝的時候還是在持續更新,最新版本是4.7.1,并且完美支援Xamarin。在動态構造函數參數傳入為null時,會自動生成參數對象的執行個體。

根據上面的情況,如果對參數判斷null時,在StructureMap下,可能還要多判斷一層(對象的種屬性),而Castle Windsor參數為null時根據不能建構出對象,實際需要自己new一個執行個體傳進去,是以也需要在判斷null時加入層次的判斷。

根據自己的喜歡使用喜歡的架構吧。如果沒有特喜歡的,建議使用Autofac和Unity,然後必須的情況下使用NInject和StructureMap。

繼續閱讀