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时,我得到一个运行时异常,说无法解析IPerson(此代码在玩具应用程序的AppDelegate中的注册代码之后立即找到):

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

这是错误:

Unable to resolve type: TinyTest.IPerson

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

我已经尝试在IPerson接口和Person类上放置[Preserve]属性,但没有骰子.我也试过手动声明一个IPerson类型的变量并用一个新的Person()实例化它然后抓住age属性,只是为了确保类型包含在构建中,但也没有运气.

感觉我在这里错过了什么 – 有人能指出我正确的方向吗?

谢谢!

最佳答案 这是
bug,因为反射用于调用内部表达式< TDelegate>构造函数.

链接器无法分析反射使用情况(超出静态分析),因此必须了解这些特殊情况.

This is obviously untenable, though, because the binary becomes enormous.

继续使用默认的Link SDK选项,但在项目选项iOS Build中添加–linkskip = System.Core到Additional mtouch参数.

这样只有System.Core(来自SDK)才会被链接,并且大小的增加会小得多.当然,在新版本正确修复问题之前,这只是一种解决方法.

点赞