Rana Hossain
Rana Hossain

Reputation: 415

Xamarin Linker : Default constructor not found for type Cirrious.CrossCore.IoC.MvxPropertyInjector

With a skeleton project with FirstView from HotTuna package, and with Build linker behavior set to "Link all assemblies", I get the following error:

System.MissingMethodException: Default constructor not found for type Cirrious.CrossCore.IoC.MvxPropertyInjector

Using NuGet package v3.1.1 for all MvvmCross (4 packages)

LinkerPleaseInclude file does have the line [MonoTouch.Foundation.Preserve(AllMembers = true)]

Using the latest stable build:

On PC: Xamarin for VS 1.12.278 Xamarin.iOS 1.12.278

Mac: Xamarin.iOS 7.2.2.2

Of course with Linker behavior of SDK only, it runs fine. Any suggestions anyone?

Upvotes: 4

Views: 4917

Answers (2)

Joe Healy
Joe Healy

Reputation: 5817

I hit this when my XCode was out of sync with the latest Xamarin on my Mac. Upgrading XCode to the latest resolved the problem.

Upvotes: 1

Rana Hossain
Rana Hossain

Reputation: 415

Solved; So, with the basic project, there were three consecutive errors in the following order:

System.MissingMethodException: Default constructor not found for type Cirrious.CrossCore.IoC.MvxPropertyInjector
  • can be resolved either by --linkskip=Cirrious.Core (ugly), or by including the following in LinkerPleaseInclude.cs

    public void Include(MvxPropertyInjector injector){
        injector = new MvxPropertyInjector ();
    } 
    

Next error is:

    Cirrious.CrossCore.Exceptions.MvxException: Failed to construct and initialize ViewModel for type {0} from locator MvxDefaultViewModelLocator - check MvxTrace for more information

This one is difficult; Simple fix is to ofcourse to do a --linkskip=portableLibrary, or to crate an instance of the ViewModel somewhere (perhaps in LinkerPleaseInclude.cs); problem with the second approach at-least in my case is, most of my VM doesn't have a parameter less constructor, and obviously using IOC in this case wouldn't help.

Final Error:

System.ArgumentNullException: missing source event info in MvxWeakEventSubscription
Parameter name: sourceEventInfo

Either use --linkskip=System (ugly), or add the following to LinkerPleaseInclude.cs

    public void Include(INotifyPropertyChanged changed)
    {
        changed.PropertyChanged += (sender, e) =>  {
            var test = e.PropertyName;
        };
    }

This was enough for my basic project to run with LinkAllAssemblies, Using LLVM optimizer, and Use SGen collector.

Hope this will help anyone looking for a solution.

Upvotes: 8

Related Questions