我有一个使用Xamarin.iOS开发的iOS应用程序,它使用Ninject 3.3.0 for IoC。我可以毫无问题地绑定接口和实现,但我得到一个PlatformNotSupportedException
来解析与IResolutionRoot.Get<T>()
的绑定。我正在连接的Macbook上启动模拟器。我创建了一个测试(空白)iOS应用程序来演示该问题。以下是相关部分:
[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
...
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
...
var kernel = new StandardKernel();
kernel.Bind<IFoo>().To<Foo>();
var test = kernel.Get<IFoo>(); //exception thrown here
return true;
}
}
这里是堆栈跟踪的顶部(可以提供更多):
&#34;在System.Reflection.Emit.DynamicMethod..ctor(System.String名称, System.Type returnType,System。...&#34;
根据this网站,内核为其绑定创建了这些DynamicMethod。由于.Net Standard 2.0的Ninject is supported,为什么我从这么简单的操作中得到这个例外?
答案 0 :(得分:4)
更新:Portable.Ninject正常运行,因此如果您使用iOS,请使用它。以下是我如何到达那里以及为什么常规Ninject无法工作的解释。
System.Reflection.Emit is not supported。这可能意味着Ninject的大部分功能都不适用于iOS。
这些链接对我来说特别具有误导性:
https://developer.xamarin.com/api/type/System.Reflection.Emit.DynamicMethod/
现在已经了解了这个限制,很明显本文中提到的一代阻碍了Ninject的工作,尽管它没有明确说明。
http://arteksoftware.com/ioc-containers-with-xamarin/
这篇文章的作者提到了这个限制,虽然看起来他已经开始工作了。