TL; DR:Autofac是否支持类似于AutoFixture的fixture.Get()
机制?Autofac:注册异步工厂方法
我使用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 autofaccery>
代表与ContainerBuilder
和/或和/或某种形式的generated Delegates或类似交互的某种机制在本质上是简洁和隔离我明确指定Factory Method的参数。即,我想避免明确地解决每个参数[和/或必须更新他们的依赖性变】像我这样ATM:
var appModel = await AppModel.CreateAsync(
container.Resolve<IDependency>(),
container.Resolve<IDependency2>());
我在基础设施组件境内,靠近组成的根和可能潜在地以编程方式定义组件注册和/或做其他应该限制在那里的麻烦。我不介意反思,因为它只被调用一次。
什么是关键是我确实需要从Task
发出的任何Exception
观察。
Task<T>
的是一个红色鲱鱼在很大的程度,但问题是,以下定义的同步工厂方法以及具有Autofac通过工作不会飞(至少不直接地)的正常模式,即,I可以“T只是将其更改为:
public static AppModel CreateAsync(IDependency x, IDependency2 y)
{ ... }
我也想避免两相初始化 - 我不需要的对象,直到它被初始化为可用。
为什么效益做到这一点的解决方案使用标准的解决方法给您禁忌? – jgauffin
@jguaffin为了澄清一点,我不希望有任何明确的注册,依靠依靠[代表工厂](http://docs.autofac.org/en/latest/advanced/delegate-factories.html)和我正在寻找类似的处理'任务'方面的[关系类型](http://nblumhardt.com/2010/01/the-relationship-zoo/) - 但美中不足的是, 't想要做'异步' –
@jguaffin看到[我的第三个答案](http://stackoverflow.com/a/37390850/11635)的东西,实现了封装,我希望从消费者的角度来看,没有需要在Autofac中进行明确的注册。 –