2017-09-14 30 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());