gpt4 book ai didi

c# - 在 Autofac 中注册异步工厂

转载 作者:太空狗 更新时间:2023-10-29 22:32:59 24 4
gpt4 key购买 nike

我有一个从存储库中获取的钱包类。我正在尝试在 Autofac 中正确注册两者,以便使用钱包的类可以注入(inject)正确的实例。问题是存储库使用异步方法(返回任务)。 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 的任何特定支持工厂。您仍然可以让它工作,但是您必须编写一些样板代码,因为构造函数注入(inject)将不起作用。你还必须更直白一点,说你想要 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 可能有一些扩展点可以使这段代码更简单,但我对它的了解还不够多,无法帮助您。

关于c# - 在 Autofac 中注册异步工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15854245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com