【问题标题】:Xamarin.Forms Prism: Android dependency injection of platform-specific serviceXamarin.Forms Prism:平台特定服务的 Android 依赖注入
【发布时间】:2017-09-15 01:53:45
【问题描述】:

我正在尝试注入特定于 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 中注册?

【问题讨论】:

  • 为什么你的 LoginService 不接受构造函数 IClsDkwsService ?为什么要执行呢。这有点违反依赖注入,你不觉得吗?
  • 我想将它们注册为单身人士。我还能怎么做?

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


【解决方案1】:

不要尝试手动创建这些依赖项的实例,而是使用 DI 容器的功能。您可以使用以下方法在 Unity 中将类型注册为单例

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

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2020-02-04
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多