Xamarin.forms 如何在Prism模块中注册特定于平台的实现?

Xamarin.forms 如何在Prism模块中注册特定于平台的实现?,xamarin.forms,prism,Xamarin.forms,Prism,我正在尝试在Xamarin Forms应用程序中创建一个Prism模块。我的模块包含特定于平台的代码和一个视图模型,其中包含一个接口。例如: ThingModule (PCL) ThingModule + Initialize() IThing ThingView ThingViewModel(IThing thing) ThingModule.Droid (Android) AndroidThingImplementation : IThing ThingModule.iO

我正在尝试在Xamarin Forms应用程序中创建一个Prism模块。我的模块包含特定于平台的代码和一个视图模型,其中包含一个接口。例如:

ThingModule (PCL)
 ThingModule
   + Initialize()
 IThing
 ThingView
 ThingViewModel(IThing thing)

ThingModule.Droid (Android)
 AndroidThingImplementation : IThing

ThingModule.iOS (iOS)
 iOSThingImplementation : IThing

我可以在模块的初始化方法中轻松注册导航视图,但如何在模块(而不是应用程序)中注册特定于平台的实现?

您不在模块中注册特定于平台的实现。您可以在实际的特定于平台的项目中注册特定于平台的项目。您的模块只需引用接口即可。您可以使用IPlatformInitializer来执行此操作。请参见此处的示例:

安卓:

XF项目:


我的目标是让我们创建的模块在库中实时运行。我们正在构建使用此库的多个应用程序。我希望有一种方法可以让模块的消费者不必记住(甚至不必知道)他们必须注册特定于平台的实现。很容易让应用程序注册它们。谢谢
[Activity(Label = "HelloWorld", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        TabLayoutResource = Resource.Layout.tabs;
        ToolbarResource = Resource.Layout.toolbar;

        base.OnCreate(bundle);

        global::Xamarin.Forms.Forms.Init(this, bundle);
        LoadApplication(new App(new AndroidInitializer()));
    }
}

public class AndroidInitializer : IPlatformInitializer
{
    public void RegisterTypes(IUnityContainer container)
    {

    }
}
public class App : PrismApplication
{
    public App(IPlatformInitializer initializer = null) : base(initializer) { }
    ...
}