我有一个从存储库获取的 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(使用前将#替换为@)