2012-04-03 100 views
1

任何人都有运气让Ninject在MonoDroid上工作?我已经尝试过从他们的网站2.0和4.0单声道版本,也试过.net版本。Ninject和MonoDroid

随着单建立我在快乐

+0

[Monodroid和ninject]的可能的重复(http://stackoverflow.com/questions/6337227/monodroid-and-ninject) – ctacke 2012-05-19 04:00:00

回答

5

我正在试用Ninject的WP7/Monotouch/Mono for Android项目,Ninject的工程出奇的好。

我使用了最新的资源,其中包含一个项目文件Ninject.WP7.csproj,它似乎已经过时。它包含了很多DefineConstants。我用这些常量创建了新的WP7/Monotouch/Mono for Android解决方案,并且编译并运行了所有内容!

常量使用:

SILVERLIGHT,SILVERLIGHT_40,NO_LCG,NO_ASSEMBLY_SCANNING,NO_WEB,NO_PARTIAL_TRUST,NO_SKIP_VISIBILITY,NO_EXCEPTION_SERIALIZATION,NO_DEBUG_SYMBOLS 

不知道,如果都需要他们,但由于MonoTouch的/单声道为Android实现的Silverlight API的很大一部分Silverlight的一个非常重要。

当然,您无法使用Ninject创建Android活动。我主要将它用于构造函数注入,像ViewManager一样创建.Net对象,使用存储库查看模型等等,这些是您使用依赖注入进行的常见操作。

+0

谢谢这应该有所帮助。我从来没有在Mono之前编译过一个.net项目。我假设你需要用单声道版本替换参考文件?任何指导如何做到这一点? – 2012-05-20 00:11:00

+0

一个简单的方法就是将Android类库项目添加到您想要使用Ninject的Mono for Android项目中。然后将所有Ninject源文件添加到项目中。 (这是相当多的,所以要做到这一点,请以XML模式打开新的项目文件和Ninject.csproj文件,然后复制并粘贴ItemGroup)。 – 2012-05-20 13:10:53

+0

只需解压缩源文件,右键单击解决方案窗口并选择“Include in Project”(只要您在解决方案资源管理器中选中第二个按钮以显示解决方案中的所有文件)。 – ashes999 2013-01-30 04:39:06

1

我没有试图让Ninject工作我StandardKernel的实例得到一个MissingMethodException,但我会很惊讶,如果它只是工作开箱。如果有Ninject的Silverlight版本,你可能会有更多的运气,但是没有保证。在Mono for Android中获得对它的支持的“最佳”方式是将代码与Mono for Android配置文件构建为类库。

也就是说,还有其他选项用于在您的应用中执行服务位置。我有一个blog post up here,谈论如何将TinyIoC和Funq用于服务位置。

+0

可以微小的IoC支持AOP?主要是通过一种方法挂钩到对象的生命周期中,以便像日志一样包装它。 如果不是你如何重建它?我假设你用Mono.Android替换了一些引用,但哪些是? – 2012-04-03 23:46:14

+0

Android并没有真正提供挂钩其对象生命周期的任何好方法,比如活动,所以容器最终被用于服务位置。如果你正在寻找AOP,我已经看到人们在Mono for Android应用程序中使用PostSharp,因为它可以在编译时工作,所以这可能对你有用。 – 2012-04-04 00:47:10

+0

从我所见过的大多数AOP生命周期中,基本上只是拦截一个方法并将其包装。如果你围绕一个Action包装一个Try Catch块,这基本上就是该方法的生命周期。问题是DI容器是否具有此构建并使您能够在调用动作之前执行代码 – 2012-04-04 23:57:14