如何使用 Xamarin Forms DependencyService 通过参数化构造函数注入依赖项?
Answer
你不能。
程序集属性实现仅适用于默认构造函数(也称为无参数构造函数),例如[assembly: Dependency(typeof(MyClass))]
.
运行时实现也仅适用于默认构造函数(也称为无参数构造函数),例如Xamarin.Forms.DependencyService.Register<T>()
Edit:(突出显示Nitha Paul 在评论中提出的问题 https://stackoverflow.com/questions/56586251/xamarin-dependencyservice-with-parameterized-constructor/56586722?noredirect=1#comment99751758_56586722): Xamarin.Forms.DependencyService
is a 服务定位器 https://en.wikipedia.org/wiki/Service_locator_pattern,不是一个国际奥委会容器 https://msdn.microsoft.com/en-us/magazine/jj991965.aspx?WT.mc_id=none-stackoverflow-bramin,并且服务定位器无法进行依赖注入。
推荐
我建议使用TinyIoC https://www.nuget.org/packages/TinyIoC/用于您的依赖注入。
以下性能指标显示 TinyIoC 是 Xamarin.Forms 最快的 IoC 工具:https://github.com/jsuarezruiz/xamarin-forms-perf-playground#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; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)