====================================== Cross-Platform and Native Applications ====================================== Tools like Xamarin and .NET Native enable .NET code to be compiled to target specific platforms. However, given .NET reflection doesn't necessarily "just work" on all native platforms and auto-wiring of parameters and construction of objects largely relies on reflection, you sometimes have to do some additional work to get Autofac and DI to work. Xamarin ======= When using Xamarin to create an iOS or Android app and the linker is enabled, you may need to explicitly describe types requiring reflection. The `Xamarin Custom Linker Configuration `_ documentation explains how you can notify the linker to keep certain types and not strip them from the finished product. This boils down to... * Mark types you own with a ``[Preserve]`` attribute * Include a custom XML link description file in your build A simple link description file looks like this: .. sourcecode:: xml Autofac makes use of the ``System.Convert.ChangeType`` method in lambda expressions to convert types so including it in the linker definition is needed. See `issue #842 `_ for further discussion. For additional details on how to structure your Xamarin custom linker configuration file and how to include it in your build, `check out the Xamarin documentation `_. .NET Native =========== `.NET Native `_ is a way to compile .NET binaries to native code. It's used in Universal Windows Platform (UWP) and Windows Store apps, among others. When using `.NET Native with reflection `_ you may run into exceptions like ``MissingMetadataException`` when the compiler has removed the reflection metadata for types you need. You can configure .NET Native compilation using a `Runtime Directives (rd.xml) file `_. A simple directive file looks like this: .. sourcecode:: xml That directive file tells the compiler to keep all the reflection data for everything in the entire application package. That's sort of the "nuclear option" - if you want to make your application package smaller you can be much more specific about what to include. `Refer to the MSDN documentation for more detail. `_