在.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。