TinyIoC,Xamarin.iOS,链接器设置

我试图让TinyIoC在Xamarin.iOS上工作,但我没有太多的运气。 我的项目链接器设置设置为“仅链接SDK程序集”。

我真的在做这样简单的事情:

public interface IPerson { int age { get; } } public class Person : IPerson { public int age { get { return 99; } } } 

然后我的注册码看起来像这样(我刚刚把它放在我的AppDelegate中的一个玩具应用程序中):

 TinyIoCContainer.Current.Register<IPerson,Person>.AsMultiInstance(); 

当我试图抓取一个IPerson时,我得到一个运行时exception,说IPerson无法parsing(这个代码是在玩具应用的AppDelegate中的注册码之后立即find的):

 IPerson person = TinyIoCContainer.Current.Resolve<IPerson>(); 

这是错误:

 Unable to resolve type: TinyTest.IPerson 

但是,如果将链接器设置更改为“不链接”,则一切正常。 但是,这显然是站不住脚的,因为这个二进制变得很庞大。

我试过在IPerson接口和Person类中放置[Preserve]属性,但是没有骰子。 我也尝试过只是手动声明一个IPersontypes的variables,并用一个新的Person()实例化它,然后抓取age属性,只是为了确保这个types包含在构build中,但是没有运气。

感觉就像我在这里失去了一些东西 – 有人能指出我在正确的方向吗?

谢谢!

这是一个错误,因为reflection用于调用内部的Expression<TDelegate>构造函数。

链接器不能分析reflection的用法(超出了静态分析的范围),所以必须了解这些特殊情况。

但是,这显然是站不住脚的,因为这个二进制变得很庞大。

继续使用默认的链接SDK选项,但在项目选项 iOS Build中添加--linkskip=System.Core到您的其他mtouch参数

这样只有System.Core(来自SDK)将不会被链接,并且尺寸的增加将会小得多。 当然,这只是一个解决方法,直到新版本正确解决问题。

    Interesting Posts