"Autofac wählt automatisch den Konstruktor mit den meisten Parametern aus, die aus dem Container abgerufen werden können." Ich möchte es anders machen und stattdessen den Standardkonstruktor wählen. Ссылка
%Vor%Wenn ich den Kurs verdrahte, habe ich Folgendes getan:
%Vor%Die erste Bindung in der Liste constructorBindings ist immer diejenige mit dem Konstruktor parameterless. Nicht sicher, ob es zuerst definiert wurde oder wie Autofac die Konstruktoren abtastet, aber ist dies der richtige Ansatz für den parameterlosen Konstruktor?
Danke
Autofac verwendet intern die Methode Type.GetConstructors
, um die Konstruktoren zu ermitteln.
Aus den Methoden Dokumentation :
Die GetConstructors-Methode gibt keine Konstruktoren in a zurück bestimmte Reihenfolge , z. B. Deklarationsreihenfolge. Dein Code darf nicht abhängen in der Reihenfolge, in der Konstruktoren zurückgegeben werden, weil diese Reihenfolge variiert.
Es war also nur Glück, dass es in Ihrem Fall mit der First()
funktioniert hat. In einer geeigneten Implementierung müssen Sie explizit nach dem Konstruktor mit 0 Argumenten suchen:
Sie können die Theorie mit dieser sehr einfachen Klasse testen:
%Vor%Mit Ihrer Implementierung:
%Vor% Er gibt 22
aus. Der Konstruktor mit dem Argument int
wird aufgerufen:
Mit meiner Implementierung:
%Vor% Er gibt 1
aus, z. B. wird der Standardkonstruktor aufgerufen.
Tags und Links autofac