如何在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 

Solutions Collecting From Web of "如何在Xamarin.Android注册我自己的应用程序子类?"

find了。 文档已过时。 你将需要一个具有两个参数的特殊c'tor,你将不得不添加[Application]属性:

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

编辑:另外,它似乎必须重写OnCreate()。 如果你只有构造函数,它将不会被调用。

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

编辑2015年11月:这是一个链接到Xamarin文档,这解释了为什么这种行为存在 。

… Xamarin.Android通过在构build过程中添加一个mono.MonoRuntimeProvider ContentProvider到AndroidManifest.xml中。 mono.MonoRuntimeProvider.attachInfo()方法负责将Mono运行时加载到进程中。 任何在此之前使用Mono的尝试都将失败。 (注意:这就是为什么Android.App.Application的子类需要提供一个(IntPtr,JniHandleOwnership)构造函数,因为Application实例是在Mono初始化之前创build的)。