【发布时间】:2014-05-05 22:11:14
【问题描述】:
我想知道是否支持 AOP(面向方面编程)和 MonoTouch(以及 MonoDevelop)。
到目前为止,我还没有找到任何支持 MonoDevelop 的工具。据我所知,不支持 PostSharp 之类的工具。
【问题讨论】:
标签: xamarin.ios aop monodevelop postsharp
我想知道是否支持 AOP(面向方面编程)和 MonoTouch(以及 MonoDevelop)。
到目前为止,我还没有找到任何支持 MonoDevelop 的工具。据我所知,不支持 PostSharp 之类的工具。
【问题讨论】:
标签: xamarin.ios aop monodevelop postsharp
我能够让 PostSharp 在 Mono for Android(使用 Visual Studio)上工作。我没用过 MonoTouch,不过你还是可以试试看:http://mgroves.com/monodroid-with-postsharp/
【讨论】:
不依赖于动态代码生成的工具应该与 MonoTouch 一起使用。 IIRC PostSharp 就是这样一个工具 - 即它修改 IL 以获得结果。
它对 MonoTouch(比其他 .NET 平台,包括 Android 的 Mono)更严格的原因是 iOS 不允许代码生成,因此我们无法在设备上进行 JIT。这意味着所有 MonoTouch 应用程序都必须经过 AOT 编译(提前)。
请注意,一个工具可以工作并不意味着它会工作。例如。这些工具必须能够在 OSX 上执行,并且您需要将其集成到构建中(在 C# 编译之后但在 AOT 编译之前)。后者可能需要您使用脚本/Makefile 来构建您的项目。
【讨论】:
我最近创建了一个名为StaticProxy.Fody 的Fody 插件,它在编译时将拦截代码编织到一个类中,并且还可以自动实现接口。这或多或少是城堡动态代理“没有目标的接口代理”和“有目标的接口代理”和“类代理”提供的。
但是请注意,它的限制在于您需要标记应该由[StaticProxy] 属性编织的接口/类。因此,您只能拦截可以添加此内容的类型(==> 源代码在您的控制之下)。
另外,因为它添加了一个构造函数参数,所以依赖注入容器的使用基本上是强制性的(它会中断“new Foo(..)”调用)。我已经为 ninject 和 unity 创建了扩展:
nuget 包可用,如果有人可以测试 MonoTouch / MonoDroid 集成,我将非常欢迎。我担心我目前没有正确创建 nuget 包。
我还计划添加自动工厂实现(例如 ninject 的“.ToFactory()”绑定)。
【讨论】: