我该如何使用Xamarin Forms中的DependencyService通过参数化构造函数注入依赖项?
你无法这样做。
装配属性实现仅适用于默认构造函数(也称为无参数构造函数),例如:[assembly: Dependency(typeof(MyClass))]
。
运行时实现也只能使用默认构造函数(即无参数构造函数),例如Xamarin.Forms.DependencyService.Register<T>()
编辑:(强调Nitha Paul在评论中的问题):Xamarin.Forms.DependencyService
是一个服务定位器(Service Locator),而不是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; }
}