在 Autofac 中注册异步工厂

2024-01-28

我有一个从存储库获取的 Wallet 类。我正在尝试在 Autofac 中正确注册两者,以便使用钱包的类可以注入正确的实例。问题是存储库使用异步方法(返回任务)。 Autofac 支持这种情况吗?

这不起作用:

cb.RegisterType<WalletRepository>()
    .As<IWalletRepository>()
    .SingleInstance();
cb.Register(async c => await c.Resolve<IWalletRepository>().CreateAsync(App.WalletPath));
cb.RegisterType<ViewModel>()
    .AsSelf().
    .SingleInstance();

在应用程序的某个地方我只有:

class ViewModel
{
    public ViewModel(Wallet wallet)
    {
        //nothing fancy here
    }
}

打电话时container.Resolve<ViewModel>()我收到一个异常,说钱包未注册。


除非我弄错了,否则 Autofac 没有任何具体支持async工厂。您仍然可以使其工作,但您必须编写一些样板代码,因为构造函数注入不起作用。你还必须更直白地表达你想要的Task<T>代替T。整个代码看起来像这样:

cb.RegisterType<WalletRepository>()
  .As<IWalletRepository>()
  .SingleInstance();
cb.Register(c => c.Resolve<IWalletRepository>().CreateAsync(App.WalletPath));
cb.Register(async c => new ViewModel(await c.Resolve<Task<Wallet>>()))
  .SingleInstance();
var container = cb.Build();
var viewModel = await container.Resolve<Task<ViewModel>>();

Autofac 可能有一些扩展点可以使代码更简单,但我对它的了解还不够,无法帮助您解决这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Autofac 中注册异步工厂 的相关文章

  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • 当我在组合框中选择一个项目时,如何防止 TextChanged 事件?

    我有一个TextChanged http msdn microsoft com en us library system windows forms control textchanged aspx我的事件ComboBox http msd
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke

随机推荐

  • 使用 Django 通道进行会话身份验证

    尝试使用 Django 通道进行身份验证 使用一个非常简单的 websockets 应用程序 该应用程序回显用户使用前缀发送的任何内容 You said 我的流程 web gunicorn myproject wsgi log file p
  • Log4j 配置和观察无法正常工作

    我在我的应用程序中使用 log4j 进行日志记录 从现在开始 我使用以下代码来配置日志记录 LogManager resetConfiguration InputStream stream Thread currentThread getC
  • Android Studio:尝试呈现 XML 布局时出现 InvalidVirtualFileAccessException

    我正在尝试在我的应用程序中预览 xml 布局 任何 xml 布局 我正在使用 Android Studio 1 5 Preview 2 我一遍又一遍地收到此错误 InvalidVirtualFileAccessException 访问无效的
  • 使用 Excel VBA 运行 SQL 查询

    我对 SQL 和 VBA 相当陌生 我编写了一个 SQL 查询 我希望能够从 Excel 工作簿中的 VBA 子程序调用和运行该查询 然后将查询结果带入工作簿中 我在网上找到了一些潜艇 stackoverflow 和其他地方 声称可以这样做
  • 寻找家谱[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在为我的 Web 应用程序创建具有 HTML5 要求的家谱功能 我已经搜索并找到了一些 JS 示例 但没有找到符合我要求的 我已经尝试
  • 隐藏特定子页面上的 Ionic TabBar (IONIC 3)

    我想在多个特定页面上隐藏我的标签栏 我的主要重点是将其隐藏在我的登录页面 注册页面和评论页面上 我尝试过 tabsHideOnSubPages true 但是当我这样做时我的 UserProfile 页面 这是一个子页面 隐藏选项卡栏 选项
  • 如何在 SSL 下从 PDO 连接 MySQL

    我已经配置了MySQLubuntu 服务器中的 SSL show variables like ssl Variable name Value have openssl YES have ssl YES ssl ca etc mysql c
  • 配置 WEBUTIL 后 Oracle Form 冻结

    我正在使用 Oracle Forms 10g 它是基于 Web 的 Oracle 表单应用程序 我想从 Oracle Forms 10g 生成 Excel 报告 我配置了 WEBUTIL 并使用 CLIENT OLE2 包 在触发器 WHE
  • 查找矩阵中对角线的单词字母

    我有一个5 6的矩阵 所有的值都是英文字母 我必须在矩阵中从左到右 从右到左 从上到下 从上到对角线找到特定的单词 其实这是一个字谜 我能找到 左右 右左 上下 和 下上 这些词 当涉及到对角线查找单词时 事情会变得更加混乱 我提供了从左到
  • Ionic Framework 和 Firebase 3.x 版本:此域未获得对您的 Firebase 项目进行 OAuth 操作的授权

    我正在使用 Ionic Framework 和 Firebase 开发 iOS 应用程序 我已在我的项目中将 Firebase SDK 更新到版本 3 x 我想做的是在真实设备上使用 Facebook 对用户进行身份验证 当我在浏览器上测试
  • JpaRepository删除子元素

    我正在尝试执行一个非常简单的删除操作 但不知何故它不起作用 因为我将 DAO 更新到了 JpaRepository 基本上是这样的 A a aRepository findOne id a setSomeField someNewStrin
  • Google App Engine 为什么某些日志没有显示?

    在 Google App Engine 灵活环境中 许多日志正在跳过 并且没有显示在日志记录控制台中 并且这种情况总是发生 我正在检查它Stackdriver LoggingGoogle Cloud 仪表板上的部分 我使用的日志显示cons
  • ReactJS如何仅在向下滚动并到达页面上时渲染组件?

    我有一个反应组件Data其中包括几个图表组件 BarChart LineChart etc When Data组件开始渲染 需要一段时间才能从API接收到每个图表所需的数据 然后开始响应并渲染所有图表组件 我需要的是开始渲染每个图表only
  • 在 Vaadin 14 应用程序的服务器端通过 Java 获取用户 Web 浏览器的 IP 地址

    In 瓦丁流 https en wikipedia org wiki Vaadin Vaadin Flow 比如14 1版本 如何获取IP地址 https en wikipedia org wiki IP address用户的网络浏览器通过
  • python:生成器对象的属性

    是否可以在生成器对象上创建属性 这是一个非常简单的例子 def filter x for line in myContent if line x yield x 现在假设我有很多这样的过滤器生成器对象漂浮在周围 也许其中一些是匿名的 我想稍
  • 使用 awk 将大型复杂的一列文件拆分为多列

    我有一个由某些商业软件生成的文本文件 如下所示 它由括号分隔的部分组成 每个部分都有数百万个元素 但具体值因情况而异 1 2 3 11 22 33 111 222 333 我需要实现如下输出 1 11 111 2 22 222 3 33 3
  • Request.UrlReferrer 在 Internet Explorer 7、8、9 浏览器中返回“null”

    在 Internet Explorer 7 8 9 浏览器中 C 的 Request UrlReferrer 返回 null 其原因何在 它的解决办法是什么 页面上有一些 单击此处 按钮 单击该按钮后 将在新选项卡中打开一个新的 url 页
  • 在 JQGrid 中映射 JSON 数据

    我正在使用 jqGrid 3 6 4 和 jquery 1 4 2 在我的示例中 我得到以下 json 数据格式 我想将这些 json 数据映射到 jqgrid 的行中 page 1 total 1 records 6 rows head
  • poll() 超时为 0 时会做什么?

    我正在看poll man page http man7 org linux man pages man2 poll 2 html 它告诉我的行为poll 当超时参数传入正值和负值时 它没有告诉我如果超时会发生什么0 有任何想法吗 看着epo
  • 在 Autofac 中注册异步工厂

    我有一个从存储库获取的 Wallet 类 我正在尝试在 Autofac 中正确注册两者 以便使用钱包的类可以注入正确的实例 问题是存储库使用异步方法 返回任务 Autofac 支持这种情况吗 这不起作用 cb RegisterType