簡體   English   中英

Xamarin.Forms Prism:特定於平台的服務的Android依賴項注入

[英]Xamarin.Forms Prism: Android dependency injection of platform-specific service

我試圖注入特定於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中注冊了所有特定於平台的服務?

與其嘗試手動創建這些依賴項的實例,不如使用DI容器的功能。 您可以使用以下方法在Unity中將類型注冊為單例

Container.RegisterType<IMyService, MyService>(new ContainerControlledLifetimeManager());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM