2017-09-14 115 views
0

我試圖注入一個Android和iOS特定的服務,但在Android上我得到一個錯誤App.xaml.cs關於它無法解析參數LoginServiceXamarin.Forms Prism:Android依賴注入特定於平臺的服務

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()); 
    } 
} 

它看起來LIK在App.RegisterTypes()之後稱爲。我想避免在每個平臺上註冊LoginService。我如何確保所有平臺特定的服務在App.xaml.cs中註冊?

+0

爲什麼您的LoginService不在構造函數IClsDkwsService中?爲什麼要執行它。這是違反注射劑的行爲,你不覺得嗎? – BraveHeart

+0

我想將它們註冊爲單身人士。我還能怎麼做呢? – user1202032

回答

2

而不是嘗試手動創建這些依賴關係的實例,請使用DI容器的功能。您可以在Unity中使用單身註冊類型

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