Awesome
This archive is not actively maintained and has become outdated, I will try to update when I am able. Please also see the following reasources regarding using a Generic Host
in Xamarin Forms.
Add ASP.NET Core's Dependency Injection into Xamarin Apps with HostBuilder
Xamarin.Forms Generic Host
A Xamarin.Forms generic host implementation for Microsoft.Extensions.Hosting
.
Installation
You can add this library to your project using NuGet.
Package Manager Console Run the following command in the “Package Manager Console”:
PM> Install-Package West.Extensions.XamarinHosting
Visual Studio Right click to your project in Visual Studio, choose “Manage NuGet Packages” and search for ‘West.Extensions.XamarinHosting’ and click ‘Install’.
.NET Core Command Line Interface Run the following command from your favorite shell or terminal:
dotnet add package West.Extensions.XamarinHosting
Usage
Create a new Xamarin.Forms project and modify the following files to look like the examples below:
App.xaml.cs
public partial class App : Application
{
public App() => InitializeComponent();
public App(IHost host) : this() => Host = host;
public static IHost Host { get; private set; }
public static IHostBuilder BuildHost() =>
XamarinHost.CreateDefaultBuilder<App>()
.ConfigureServices((context, services) =>
{
services.AddScoped<MainPage>();
});
protected override void OnStart()
{
Task.Run(async () => await Host.StartAsync());
MainPage = Host.Services.GetRequiredService<MainPage>();
}
protected override void OnSleep()
{
Task.Run(async () => await Host.SleepAsync());
}
protected override void OnResume()
{
Task.Run(async () => await Host.ResumeAsync());
}
}
Android MainActivity.cs
protected override void OnCreate(Bundle savedInstanceState)
{
...
// Android requires that we set content root.
var host = App.BuildHost()
.UseContentRoot(System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal)).Build();
var application = host.Services.GetRequiredService<App>();
LoadApplication(application);
...
}
iOS AppDelegate.cs
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
...
var host = App.BuildHost().Build();
var application = host.Services.GetRequiredService<App>();
LoadApplication(application);
...
}
Documentation
Docs are a work in progress, they can be found here.