如何使用Xamarin Forms DependencyService通过参数化构造方法注入依赖关系?
答案 0 :(得分:4)
你不能。
assembly属性实现仅适用于默认构造函数(也称为无参数构造函数),例如[assembly: Dependency(typeof(MyClass))]
。
运行时实现也仅适用于默认构造函数(也称为无参数构造函数),例如Xamarin.Forms.DependencyService.Register<T>()
编辑 :(突出显示Nitha Paul's question in the comments):Xamarin.Forms.DependencyService
是Service 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; }
}