PlatformNotSupportedException Ninject Xamarin.iOS

PlatformNotSupportedException Ninject Xamarin.iOS

我有一个 iOS 应用程序,使用 Xamarin.iOS 开发,它使用 Ninject 3.3.0 的 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;
  }
}

这是堆栈跟踪的顶部(可以提供更多):

" at System.Reflection.Emit.DynamicMethod..ctor (System.String name, System.Type returnType, System.…"

根据 .Net Standard 2.0 this site, the kernel creates these DynamicMethod's for its bindings. Since Ninject ,为什么我从如此简单的操作中得到这个异常?

更新: Portable.Ninject 有效,所以如果您使用 iOS,请改用它。以下是对我如何到达那里以及为什么常规 Ninject 不起作用的解释。

System.Reflection.Emitis not supported。这可能意味着 Ninject 的大部分不适用于 iOS.

这些链接特别误导了我:

https://developer.xamarin.com/api/type/System.Reflection.Emit.DynamicMethod/

现在阅读此限制后,很明显本文中提到的生成阻碍了 Ninject 工作,尽管没有明确说明。

http://arteksoftware.com/ioc-containers-with-xamarin/

这篇文章的作者提到了这个限制,尽管他似乎已经成功了。