Xamarin DependencyService with Parameterized Constructor



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

答案

你不能。

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

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

编辑:(在评论中强调Nitha Paul的问题(:Xamarin.Forms.DependencyService是服务定位器,而不是IoC容器,服务定位器不能进行依赖注入。

建议

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

以下是性能指标,显示TinyIoC是Xamarin.Forms最快的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; }
}

最新更新