Xamarin.forms 如何在Prism模块中注册特定于平台的实现?
我正在尝试在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
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) { }
...
}