c# - 带有参数化构造函数的 Xamarin DependencyService
问题描述
如何使用 Xamarin Forms DependencyService 通过 Parameterized Constructor 注入依赖项?
解决方案
回答
你不能。
程序集属性实现仅适用于默认构造函数(也称为无参数构造函数),例如[assembly: Dependency(typeof(MyClass))]
.
运行时实现也仅适用于默认构造函数(也称为无参数构造函数),例如Xamarin.Forms.DependencyService.Register<T>()
编辑:(在评论中强调 Nitha Paul 的问题):Xamarin.Forms.DependencyService
是Service Locator,而不是IoC Container,并且 Service Locator 不能进行依赖注入。
推荐
我建议使用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; }
}
推荐阅读
- swift - 在 SwiftUI 中更新树结构的 UI
- google-colaboratory - Google Colab:您的会话因未知原因而崩溃
- javascript - 通过特定语言动态提交 - JavaScript - React Hooks
- linux - 如何获取 gdb 调用堆栈跟踪?
- react-native - 失去理智 - 为什么我的 fetch 不重新渲染(redux)
- ruby-on-rails - 如何调查 Rails 中的异常?
- python - 风格损失始终为零
- java - Libgdx 软件设计
- php - 尝试执行更新方法时,路由不支持 PUT 方法
- c++ - 我可以在 VS2019 中使用旧的次要版本的 C++ 编译器吗?