如何使用 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; }
}