带有参数化构造函数的 Xamarin DependencyService [英] Xamarin DependencyService with Parameterized Constructor

查看:28
本文介绍了带有参数化构造函数的 Xamarin DependencyService的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用 Xamarin Forms DependencyService 通过参数化构造函数注入依赖项?

How I can use Xamarin Forms DependencyService to inject dependency through Parameterized Constructor ?

推荐答案

答案

你不能.

程序集属性实现仅适用于默认构造函数(又名无参数构造函数),例如[assembly: Dependency(typeof(MyClass))].

The assembly attribute implementation only works with default constructors (aka parameterless constructors), e.g.[assembly: Dependency(typeof(MyClass))].

运行时实现也仅适用于默认构造函数(又名无参数构造函数),例如 Xamarin.Forms.DependencyService.Register()

The run-time implementation also only works with default constructors (aka parameterless constructors), e.g Xamarin.Forms.DependencyService.Register<T>()

编辑:(突出显示Nitha Paul 在评论中提出的问题):Xamarin.Forms.DependencyService 是一个 服务定位器,而不是IoC 容器,服务定位器不能做依赖注入.

Edit: (Highlighting Nitha Paul's question in the comments): Xamarin.Forms.DependencyService is a Service Locator, not an IoC Container, and Service Locators cannot do Dependency Injection.

我建议使用 TinyIoC 进行依赖注入.

I recommend using TinyIoC for your Dependency Injection.

以下是显示 TinyIoC 是 Xamarin.Forms 最快的 IoC 工具的性能指标:https://github.com/jsuarezruiz/xamarin-forms-perf-playground#ioc

Here are performance metrics showing TinyIoC is the fastest IoC tool for Xamarin.Forms: https://github.com/jsuarezruiz/xamarin-forms-perf-playground#ioc

public class App : Xamarin.Forms.Application
{
    public App()
    {
        // Register DI
        TinyIoCContainer.Current.Register<INumber>(new NumberClass(42));
        TinyIoCContainer.Current.Register<MyClass>();

        // Resolve DI
        var myClass = TinyIoCContainer.Current.Resolve<MyClass>();
        Console.Writeline(myClass.ToString()); //42

    }
}

public class MyClass
{
    readonly INumber _number;

    public int MyClass(INumber number)
    {
         _number = number;
    }

    public override ToString() => _number.Num;
}

public class NumberClass : INumber
{
    public NumberClass(int number)
    {
        Num = number;
    }

    public int Num { get; }
}

public interface INumber
{
    int Num { get; }
}

这篇关于带有参数化构造函数的 Xamarin DependencyService的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆