Xamarin.Forms Prism:Android依赖注入特定于平台的服务

时间:2017-09-14 13:49:59

标签: c# xamarin xamarin.forms xamarin.android prism

我尝试注入特定于Android和iOS的服务,但在Android上我在App.xaml.cs中收到错误,因为它无法解析LoginService的参数

我的App.xaml.cs

    protected override void RegisterTypes()
    {
        Container.RegisterTypeForNavigation<NavigationPage>();
        Container.RegisterTypeForNavigation<MainPage>();
        Container.RegisterTypeForNavigation<MapsPage>();


        Container.RegisterInstance<ILoginService>(new LoginService(Container.Resolve<IClsDkwsService>()));
    }

我的MainActivity.cs

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)
    {
        container.RegisterInstance<IClsCryptoService>(new Cls_crypto());
        container.RegisterInstance<IClsDkwsService>(new Cls_dkws());
    }
}

AndroidInitializer.RegisterTypes()之后看起来App.RegisterTypes()被称为。我想避免在每个平台上注册LoginService。如何确保在App.xaml.cs中注册所有特定于平台的服务?

1 个答案:

答案 0 :(得分:2)

不要尝试手动创建这些依赖项的实例,而是使用DI容器的功能。您可以使用

在Unity中将类型注册为单例
Container.RegisterType<IMyService, MyService>(new ContainerControlledLifetimeManager());