c# – Autofac:注册Async Factory方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – Autofac:注册Async Factory方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2067字,纯文字阅读大概需要3分钟。
内容图文
![c# – Autofac:注册Async Factory方法](/upload/InfoBanner/zyjiaocheng/767/615f840db863454b8292b62338edfb04.jpg)
TL; DR:Autofac是否支持AutoFixture的fixture.Get()机制?
我正在使用Autofac,需要调用异步工厂方法,如下所示:
class AppModel
{
public static async Task<AppModel> CreateAsync(IDependency x, IDependency2 y)
{ ... }
}
我最简单的方法是执行这样的方法并让参数由Autofac提供?即,我希望能够做到这样的事情:
Task<AppModel> creationTask = <some autofaccery>(AppModel.CreateAsync);
var appModel = await creationTask();
其中< some autacaccery>表示与ContainerBuilder和/或IContainer和/或某种形式的generated Delegates或类似物相互作用的一些机制,它本质上是简洁的,并使我无法明确指定工厂方法的参数.即,我想避免必须显式解决每个参数[和/或必须更新它们作为依赖项更改],就像我做atm:
var appModel = await AppModel.CreateAsync(
container.Resolve<IDependency>(),
container.Resolve<IDependency2>());
我在基础架构组件领域,靠近组合根,并且可能以编程方式定义组件注册和/或做其他应该限制在那里的肮脏.我不介意反思,因为它只被调用一次.
重要的是我确实需要从任务中发现任何例外情况.
任务< T>在很大程度上是一个红色鲱鱼,但关键是遵循定义同步工厂方法的正常模式并且通过Autofac工作将不会飞(至少不是直接),即我不能只是将它改为:
public static AppModel CreateAsync(IDependency x, IDependency2 y)
{ ... }
我还想避免两阶段初始化 – 我不需要该对象在初始化之前可用.
解决方法:
(灵感来自TL; DR我在顶部添加)
您可以实现ResolveAsync方法系列: –
public static Task<T> ResolveAsync<T1, T>(Func<T1, Task<T>> func)
{
return func(_container.Resolve<T1>());
}
public static Task<T> ResolveAsync<T1, T2, T>(Func<T1, T2, Task<T>> func)
{
return func(_container.Resolve<T1>(), _container.Resolve<T2>());
}
public static Task<T> ResolveAsync<T1, T2, T3, T>(Func<T1, T2, T3, Task<T>> func)
{
return func(_container.Resolve<T1>(), _container.Resolve<T2>(), _container.Resolve<T3>());
}
这允许我这样做:
var appModel = await ResolveAsync<IDependency,IDependency2>(AppModel.CreateAsync);
或者显然这些可以转化为扩展方法: –
var appModel = await container.ResolveAsync<IDependency,IDependency2>(AppModel.CreateAsync);
在一个包装器上工作,允许使用C#的原始类型推理:(我将节省我的精力,而不是再花费更多时间来实现language/async paradigm not built for the job中的正确解决方案.
内容总结
以上是互联网集市为您收集整理的c# – Autofac:注册Async Factory方法全部内容,希望文章能够帮你解决c# – Autofac:注册Async Factory方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。