Ich bekomme eine DependencyResolutionException
versuchen, Autofac parameterized instantiation zu verwenden, um eine indirekte Abhängigkeit aufzulösen.Indirekte parametrisierte Instanziierung mit Autofac
Angenommen, ich habe die folgenden Klassen:
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 {}
Jetzt nehme ich ein IMuffin
wollen, aber ich will die IKnife
Abhängigkeit als Parameter liefern, wie folgt aus:
public class Breakfast
{
public Breakfast(Func<IKnife, IMuffin> muffinFactory)
{
var muffin = muffinFactory(new Knife());
}
private class Knife : IKnife {}
}
Das Problem ist, Ich bekomme eine Ausnahme auf muffinFactory(new Knife())
Beschwerde, dass die Fabrik die IKnife
Abhängigkeit des Butter
Konstruktors mit den verfügbaren Parametern und Diensten nicht lösen kann. Dies macht keinen Sinn, da ich eine Instanz von IKnife
als Parameter für die Fabrik zur Verfügung gestellt habe.
Dies scheint wie es sollte funktionieren. Was vermisse ich?
Dies ist [eine FAQ in der Dokumentation adressierte] (http://autofac.readthedocs.io/en/latest/faq/injecting-global -Parameter.html). –
Okay, ich kann sehen, woher sie kommen, aber die Verwendung der parametrisierten Instanziierung für gerade _direct_ Abhängigkeiten beinhaltet etwas "Wissen". Und es bedarf nur eines kleinen Refactorings, um eine direkte Abhängigkeit in eine indirekte umzuwandeln. Genau das ist in meinem Fall passiert. Verwenden Sie das obige Beispiel und nehmen Sie an, dass 'Muffin' ursprünglich direkt von' IKnife' abhing, so dass die parametrisierte Instanziierung durch 'Breakfast' funktionieren würde. Als "Butter" ausgeklammert wurde, wurde "Iknife" zu einer indirekten Abhängigkeit, die "Breakfast" brach. "IMuffin" -Kunden sollten von einer solchen Änderung nicht betroffen sein. –