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中進行明確的註冊。 –