AOP与MonoTouch

时间:2012-04-04 05:49:07

标签: xamarin.ios aop monodevelop postsharp

我想知道是否有任何支持AOP(面向方面​​编程)和MonoTouch(以及MonoDevelop)。

到目前为止,我无法找到任何支持MonoDevelop的工具。据我所知,不支持像PostSharp这样的工具。

3 个答案:

答案 0 :(得分:3)

我能够让PostSharp在Mono for Android上工作(使用Visual Studio)。我没有使用过MonoTouch,但你可以尝试一下:http://mgroves.com/monodroid-with-postsharp/

答案 1 :(得分:2)

不依赖于动态代码生成的工具应该与MonoTouch一起使用。 IIRC PostSharp就是这样一种工具 - 即它修改IL以获得结果。

MonoTouch比其他.NET平台(包括Android版Mono)更具限制性的原因是iOS不允许代码生成,因此我们无法在设备上进行JIT。这意味着所有MonoTouch应用程序必须经过AOT编译(提前)。

请注意,工具工作的事实并不意味着它可以正常工作。例如。这些工具必须能够在OSX上执行,你需要将它集成到构建中(在C#编译之后但在AOT编译之前)。后者可能要求您使用scripts / Makefile来构建项目。

答案 2 :(得分:2)

我最近创建了一个名为FodyStaticProxy.Fody插件,编译时将拦截代码编织到一个类中,并且还可以自动实现接口。这或多或少是例如城堡动态代理"没有目标的接口代理"和"接口代理与目标"和#34;类代理"提供。 但请注意,它的局限性在于您需要标记应由[StaticProxy]属性编织的接口/类。因此,您只能截取可以添加此类型的类型(==>>源代码)。

另外,因为它添加了一个构造函数参数,所以依赖注入容器的使用基本上是强制性的(它会破坏"新的Foo(..)"调用)。我已经为ninject和unity创建了扩展:

nuget包可用,如果有人可以测试MonoTouch / MonoDroid集成,我非常欢迎。我担心我目前没有正确创建nuget包。

我还计划添加自动工厂实施(例如ninject' .ToFactory()"绑定)。