我得到DependencyResolutionException
嘗試使用Autofac的parameterized instantiation來解決間接依賴關係。使用Autofac間接參數化實例化
假設我有以下類:
public interface IMuffin {}
public class Muffin : IMuffin
{
public Muffin(IButter butter) {}
}
public interface IButter {}
public class Butter : IButter
{
public Butter(IKnife knife) {}
}
public interface IKnife {}
現在假設我想要一個IMuffin
,但我想提供IKnife
依賴作爲一個參數,像這樣:
public class Breakfast
{
public Breakfast(Func<IKnife, IMuffin> muffinFactory)
{
var muffin = muffinFactory(new Knife());
}
private class Knife : IKnife {}
}
的問題是,我在muffinFactory(new Knife())
上發現了一個例外,抱怨工廠無法使用可用的參數和服務來解決Butter
構造函數的IKnife
依賴項。這是沒有道理的,因爲我提供了一個IKnife
的實例作爲工廠參數。
這似乎應該工作。我錯過了什麼?
這是[常見問題解答的文檔處理(http://autofac.readthedocs.io/en/latest/faq/injecting-global -parameters.html)。 –
好吧,我可以看到它們來自哪裏,但是即使_direct_依賴關係使用參數化實例化也涉及到一些「知識」。只需要一點重構即可將直接依賴關係變爲間接依賴關係。這實際上是發生在我的情況。使用上面的例子,假設'Muffin'最初直接依賴於'IKnife',所以'Breakfast'的參數化實例化會起作用。當「黃油」被分解出來時,「IKnife」成爲間接依賴,打破了「早餐」。 「IMuffin」消費者不應該受到這種變化的影響。 –