具有参数化构造函数的 Xamarin DependencyService

2024-01-11

如何使用 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(使用前将#替换为@)

具有参数化构造函数的 Xamarin DependencyService 的相关文章

  • C# 打印问题(RichTextBox)

    我想打印我的 RichTextBox eintragRichTextBox 的内容 我现在有这个代码 private void druckenPictureBox Click object sender EventArgs e PrintD
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • 单元测试验证失败

    我正在运行我的单元测试PostMyModel路线 然而 在PostMyModel 我用的是线Validate
  • 如何在另一个应用程序中挂钩 api 调用

    我正在尝试挂钩另一个应用程序的 ExtTextOut 和 DrawTextExt GDI 方法调用 我知道我需要使用 GetProcAddress 来查找 gdi32 dll 中那些方法的地址 并用我的函数的地址覆盖我想要挂钩的进程中的地址
  • 在 Java 中创建 T 的新实例

    在C 中 我们可以定义一个泛型class A
  • C++ 长 switch 语句还是用地图查找?

    在我的 C 应用程序中 我有一些值充当代表其他值的代码 为了翻译代码 我一直在争论使用 switch 语句还是 stl 映射 开关看起来像这样 int code int value switch code case 1 value 10 b
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 为什么'enable_if'不能用于禁用这里声明

    include
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 为什么以下 C 程序会出现总线错误?

    我认为这是第一个失败的 strtok 调用 好久没写C了 有点不知所措 非常感谢 include
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • 为什么匹配模板类上的部分类模板特化与没有模板匹配的另一个部分特化不明确?

    这个问题可能很难用标题中的句子来描述 但这里有一个最小的例子 include

随机推荐

  • 在 TypeScript 中定义自定义 jQuery UI 小部件

    我们目前正在考虑将 JavaScript 项目转换为 TypeScript 我们的应用程序严重依赖定制开发的 jQuery UI 小部件 在我们当前的代码库中 我们使用深度复制机制来继承小部件定义 例如 允许我们声明一个通用的TableWi
  • Scrapy 和 robots.txt 的尊重

    我昨天发现Scrapy默认尊重robots txt文件 ROBOTSTXT OBEY True 如果我请求一个 URLscrapy shell url 如果我有回应 是否意味着url不受robots txt保护 根据文档 只有当您使用创建项
  • 如何在悬停在anchorEl 和“popover”上时继续显示“popover”?

    在这个例子中material ui https material ui com utils popover mouse over interaction https material ui com utils popover mouse o
  • 在 Hibernate 中保留 Joda DateTime 而不是 Java Date

    我的实体当前包含 java Date 属性 我开始经常使用 Joda Time 进行日期操作和计算 这意味着我必须不断地将日期转换为 Joda DateTime 对象 然后再转换回来 所以我想知道 是否有任何理由我不应该只更改实体来存储 J
  • 在TeX中制作一个牢不可破的块[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想在 TeX 中做如下的事情 begin nobreak Text here will not split over pages it will r
  • QueryOver 上的析取始终引用根实体

    我试图在 X 个实现包含日期信息的特定接口的实体上使用析取来添加一定数量的 OR 条件 我的问题是 当生成 SQL 时 所有析取条件都指向 QueryOver 的根实体 我创建了一个通用方法来添加我的条件 public static Que
  • 如何在 React 中的组件外部访问 Redux 存储

    我从 Redux 开始 我总是在带有 connect 和 mapStateToProps 的组件中使用它 但现在我想每隔 x 次使用 setInterval 调用我的 API 以检查服务器是否有未存储在 Redux 存储中的新数据 并替换它
  • Keycloak 将新注册的用户保存到应用程序数据库中

    在我的应用程序中 我有一些实体关系 例如用户和组织 我想我会使用Keycloak 这样我就不必实现自定义注册 登录 密码重置 授权和身份验证 问题是 当用户注册到 Keycloak 时 我的应用程序的内部数据库中没有新的用户实体 有没有办法
  • 访问 Jboss7 或 Wildfly 上的多个 Web 应用程序

    我知道我们可以在 JBoss 7 或 Wildfly 上部署多个 Web 应用程序 但是我们如何使用不同的端口访问不同的Web应用程序呢 我们在哪里为 Web 应用程序设置该端口 例如 application1 可在 x x x x 808
  • 在 OO 模型中添加双向关系的最佳实践

    我正在努力想出一种在面向对象模型中添加双向关系的好方法 假设有一个客户可以下很多订单 也就是说客户和订单类之间存在一对多关联 需要双向遍历 对于一个特定的客户 应该可以告诉所有客户他们已经下的订单 对于订单应该可以告诉客户 下面是一段 Ja
  • 使用 pytest 和假设进行异常处理和测试

    我正在编写带有假设的统计分析测试 假设使我得出一个ZeroDivisionError在我的代码中 当它传递非常稀疏的数据时 所以我调整了我的代码来处理异常 就我而言 这意味着记录原因并重 新引发异常 try val calc data ex
  • 在 SLComposeViewController 顶部显示附加图像

    将图像添加到 SLComposeViewController 时 该图像将显示在 SLComposeViewController 视图的右侧 然而 它显示在下面 如下面的层中 另一个看起来像指南针的默认图像 最上面是一个剪辑 这个指南针图像
  • 如何通过单击按钮以编程方式退出应用程序

    我想通过单击按钮退出应用程序 单击按钮的代码是 quitBtn setOnClickListener new View OnClickListener Override public void onClick View paramView
  • 有哪些工具可用于调试/单步执行正则表达式?

    虽然有很多好的在线和离线测试正则表达式的工具 但我还没有找到一个工具 除了正则表达式好友 http www regexbuddy com 让我看到正则表达式引擎查找匹配项 或就此而言查找不存在匹配项 所采取的步骤 有谁知道有什么工具可以做到
  • 使用 Angular 路线时不显示 Stripe Checkout 按钮

    我目前正在尝试实现标准的 Stripe Payments 结账对话 当我插入短片时
  • 尝试将照片上传/发布到群组时出现 OAuthException

    我目前正在尝试通过应用程序将照片上传到页面和组 我有这些代码 try facebook gt setFileUploadSupport true args array message gt This is my image caption
  • 如何处理 Git 存储库中的图像?

    我继承了一个中等规模的 iOS 项目 大约 30 000 行代码 它有一个insane图像资产的数量 当然我们使用Git Github来进行scm 目前 图像包含在目录树中 因此被提取到存储库中 使其变得臃肿并且通常使开发变得非常令人头疼
  • Chrome 的“请求桌面站点”选项如何工作?

    对于 iOS 谷歌浏览器 当用户点击 请求桌面站点 按钮时 浏览器会做什么来尝试打开桌面站点 我想象网站正在寻找的请求上有某种标头 或者类似的东西 我认为唯一的区别是User Agent 请求中的标头 以下是我的 Android 设备上的
  • Rails JSON 请求未正确解析为 post 参数

    我正在尝试调试 Rails 未解码 JSON POST 数据的问题 服务器日志显示 2011 12 14T06 44 44 00 00 app web 2 Started POST 2011 12 14T06 44 44 00 00 app
  • 具有参数化构造函数的 Xamarin DependencyService

    如何使用 Xamarin Forms DependencyService 通过参数化构造函数注入依赖项 Answer 你不能 程序集属性实现仅适用于默认构造函数 也称为无参数构造函数 例如 assembly Dependency typeo