我尝试注入特定于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
中注册所有特定于平台的服务?
答案 0 :(得分:2)
不要尝试手动创建这些依赖项的实例,而是使用DI容器的功能。您可以使用
在Unity中将类型注册为单例Container.RegisterType<IMyService, MyService>(new ContainerControlledLifetimeManager());