Как зарегистрировать мой собственный подкласс приложения в Xamarin.Android?

У меня

public class MyApp : Application

В Java я бы добавил строку в манифест и передал ей пространство имен и имя моего приложения:

<application android:icon="@drawable/icon" android:label="@string/app_name"
    android:name="com.devahead.extendingandroidapplication.MyApplication">

В Xamarin есть атрибут [Application], но в документации указано, что член Name не поддерживается. Итак, как я могу зарегистрировать свой подкласс? Где применить атрибут к?

Если я добавлю атрибут в свой подкласс, я получаю:

System.NotSupportedException: Unable to activate instance of type TestClient_Android.MyApplication from native handle 14d00019

Ответы

Ответ 1

Нашел. Документация устарела. Вам понадобится специальный c'tor с двумя параметрами, и вам придется добавить атрибут [Application]:

[Application]
public class MyApplication : Application
{
    public MyApplication(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip)
    {
    }
}

EDIT: Кроме того, кажется, что нужно переопределить OnCreate(). Если у вас есть только конструктор, он не будет вызываться.

public override void OnCreate()
{
  // If OnCreate is overridden, the overridden c'tor will also be called.
  base.OnCreate();
}

EDIT November 2015: здесь ссылка на документацию Xamarin, в которой объясняется почему такое поведение существует.

... Xamarin.Android перехватывает это, добавляя mono.MonoRuntimeProvider ContentProvider для AndroidManifest.xml во время процесс сборки. Метод mono.MonoRuntimeProvider.attachInfo() ответственный за загрузку Mono runtime в процесс. Любые попытки использовать Mono до этого момента не удастся. (Примечание: это почему типы, для которых подкласс Android.App.Application необходимо предоставить (IntPtr, JniHandleOwnership), как экземпляр приложения создается до того, как Mono может быть инициализирован.)