2010-11-19 12 views
0

Ich habe im Sinn eine Reihe von Klassen, die alle mit einem Abhängigkeitsobjekt während der Konstruktion instanziiert werden müssen. Betrachten Sie diese Klassen:Abhängigkeitsinjektion in eine Reihe von Klassen

class A { A(IDependency dep) {...} } 
class B { A(IDependency dep) {...} } 
class C { A(IDependency dep) {...} } 
class D { A(IDependency dep) {...} } 

ich die DI wollen den Konstruktor finden in, und natürlich möchte ich die Klassen A, B, C, D von einer abstrakten Klasse erben oder die gleiche Schnittstelle implementieren.

Problem: Ich kann den Konstruktor nicht in eine Schnittstelle oder eine abstrakte Klasse einschließen.

Was ist zu tun? Von einer nicht abstrakten Basisklasse übernehmen? Die Basisklasse hat keine wirkliche Bedeutung. Verwenden Sie Factory-Methoden? Nie wirklich mochte sie ...

Irgendwelche Vorschläge?

Antwort

3

Natürlich können Sie eine Ctor in einer abstrakten Klasse haben.

public interface IDependency 
{ 
} 

public abstract class A 
{ 
    protected IDependency _dep; 

    protected A(IDependency dep) 
    { 
     _dep = dep; 
    } 
} 

public class B : A 
{ 
    public B(IDependency dep) : base(dep) 

    { 
    } 
} 
0

Sie können einen Konstruktor in die abstrakte Klasse aufnehmen und so mache ich es normalerweise. Oder Sie könnten Property-Injection anstelle von Konstruktor verwenden, die Sie in die Schnittstelle aufnehmen könnten.

Verwandte Themen