如何使用Xamarin Forms DependencyService通过参数化构造函数注入依赖项?
发布于 2019-06-14 02:36:45
回答
你不能。
程序集属性实现只适用于默认构造函数(也称为无参数构造函数),例如[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.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; }
}
https://stackoverflow.com/questions/56586251
复制相似问题