5

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

到目前为止,我还没有找到任何支持 MonoDevelop 的工具。据我所知,不支持 PostSharp 之类的工具。

4

3 回答 3

3

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

于 2012-04-04T13:14:40.633 回答
2

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

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

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

于 2012-04-04T13:24:48.400 回答
2

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

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

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

我还计划添加自动工厂实现(如 ninject 的“.ToFactory()”绑定)。

于 2014-05-04T16:14:21.800 回答