Ich habe eine Basisklasse Basis dependecy Dep und Ausfall- und Injection Constructor-Implizit Abhängigkeit in Basisklasse Injektion während abgeleiteten Klasse durch Unity behoben ist
Class Base : IBase
{
public IDep Dep { get; set; }
public Base()
{
Console.WriteLine("Default Constructor Base ");
}
[InjectionConstructor]
public Base(IDep dep)
{
Console.WriteLine("Injection Constructor Base ");
Dep = dep;
}
}
Ich dachte mit, dass Dependency dep automatisch (durch Constructor erhalten injiziert sollte Injektion), wenn die abgeleitete Klasse aufgelöst wird.
Aber das scheint nicht zu funktionieren, wenn ich eine Klasse von ihm ableite und diese Klasse auflöse, stattdessen wird ein Standard-Konstruktor der Basis aufgerufen.
Ich kann nur funktionieren, wenn ich den Konstruktor explizit von der abgeleiteten Klasse aufrufen.
class Derived : Base
{
public Derived()
{
Console.WriteLine("Default Constructor Derived ");
}
public Derived (IDep dep) : base(dep1)
{
Console.WriteLine("Injection Constructor Derived ");
}
}
Bietet Einheit eine direkte Art und Weise implizit die Injektion Constructor der Basisklasse aufrufen, (nicht durch explizite Construtor Anruf)? Wenn nicht, gibt es einen Grund, warum Einheit Container nicht selbst tut?
Ihre Probleme, die durch mehrere Konstruktoren haben. Ihre Dienste sollten nur einen einzigen Konstruktor haben. [Mehrere Konstruktoren zu haben ist ein Anti-Pattern] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=97) und sollte vermieden werden. – Steven
@Steven Ich habe Ihren Standpunkt, dass mehrere Konstruktoren ein Anti-Muster ist. Aber das Entfernen des Standardkonstruktors löst den Zweck hier nicht auf. –
Ich denke, es löst Ihre Probleme tatsächlich, denn wenn sowohl "Base" als auch "Derived" jeweils nur einen Konstruktor enthalten, der die erforderlichen Abhängigkeiten übernimmt, existiert das Problem überhaupt nicht. Ich stimme jedoch mit @BatteryBackupUnit überein, dass eine Basisklasse nicht das beste Design ist. – Steven