的autofac documentation狀態工作:Autofac枚舉不與類型多個註冊或模塊
當Autofac被注入
IEnumerable<ITask>
類型的構造符參數也不會尋找供給IEnumerable<ITask>
的成分。相反,容器會查找ITask的所有實現並注入所有實現。
但實際上,它會將每個註冊類型添加爲已註冊的次數。所以,如果你註冊類兩倍如下:
builder.RegisterType<A>();
builder.RegisterType<A>();
然後你得到兩個項目枚舉!在單個模塊中,這不是問題,因爲您顯然只需註冊一次您的類型。但是如果你有一個由多個模塊註冊的共享模塊(典型的鑽石模塊依賴關係圖),那麼你可以在枚舉中獲得儘可能多的項目,因爲共享模塊已被其他人註冊...
它是一個錯誤嗎? 有沒有辦法強制枚舉爲每個實現提供單個項目,正如文檔中所述,不再有?
謝謝!我瞭解現場背後的困境。我不知道類型的註冊不是冪等的。不知何故,你是對的,如果你想在類型和實例之間有一個唯一的註冊行爲,這是有道理的。因此,即使多個模塊依賴於它,模塊也只能被註冊一次。 *所以拇指規則:從不在另一個模塊中註冊模塊!保持一個平坦的模塊模型。只在外部例程中註冊它們,創建容器* – jeromerg