Xamarin DependencyService与参数化构造函数

时间:2019-06-13 18:05:52

标签: c# xamarin.forms

如何使用Xamarin Forms DependencyService通过参数化构造方法注入依赖关系?

1 个答案:

答案 0 :(得分:4)

答案

你不能。

assembly属性实现仅适用于默认构造函数(也称为无参数构造函数),例如[assembly: Dependency(typeof(MyClass))]

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

编辑 :(突出显示Nitha Paul's question in the comments):Xamarin.Forms.DependencyServiceService Locator,而不是IoC Container,并且服务定位器无法进行依赖注入。

推荐

我建议将TinyIoC用于依赖注入。

以下是一些性能指标,显示TinyIoC是Xamarin最快的IoC工具。表单: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; }
}