ho una classe di base di base avendo dependecy Dep e di default e iniezione Constructor-Implicitamente l'iniezione di dipendenza in classe Base mentre la classe derivata viene risolto attraverso l'Unità
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;
}
}
ho pensato che Dipendenza dep dovrebbe ottenere iniettato automaticamente (attraverso Constructor Iniezione) quando la classe derivata viene risolta.
Ma questo non sembra funzionare quando derivo una classe da esso e Risolvi quella classe, Invece viene chiamato un Costruttore di Base predefinito.
Posso solo farlo funzionare quando richiamo esplicitamente il costruttore dalla classe derivata.
class Derived : Base
{
public Derived()
{
Console.WriteLine("Default Constructor Derived ");
}
public Derived (IDep dep) : base(dep1)
{
Console.WriteLine("Injection Constructor Derived ");
}
}
Ha unità fornisce alcun modo diretto per chiamare implicitamente il costruttore iniezione di classe di base (non per chiamata construtor esplicito)? Se no, c'è qualche ragione per cui il contenitore di unità non sta facendo da solo ??
I tuoi problemi sono causati da avere più costruttori. I tuoi servizi dovrebbero avere un solo costruttore. Avere [più costruttori è un anti-pattern] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=97) e dovrebbe essere evitato. – Steven
@Steven Ho capito che più costruttori è un anti-pattern. Ma la rimozione del costruttore predefinito non risolve lo scopo qui. –
Penso che in realtà risolva i tuoi problemi, perché se sia "Base" che "Derivato" contengono ogni singolo costruttore che accetta le dipendenze richieste, il problema non esisterà affatto. Sono d'accordo tuttavia con @BatteryBackupUnit che avere una classe base potrebbe non essere il miglior design. – Steven