2010-11-19 29 views
0

Je pense à un ensemble de classes qui devront toutes être instanciées avec un objet de dépendance pendant la construction. Considérez ces classes:injection de dépendance dans un ensemble de classes

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

Je veux que le DI ait lieu dans le constructeur, et évidemment je veux des classes A, B, C, D à hériter d'une certaine classe abstraite ou mettre en œuvre la même interface.

Problème: Je ne peux pas inclure le constructeur dans une interface ou une classe abstraite.

Que faire? Hériter d'une classe de base non abstraite? La classe de base n'a pas de signification réelle. Utiliser des méthodes d'usine? Je ne les ai jamais vraiment aimés ...

Des suggestions?

Répondre

3

Bien sûr, vous pouvez avoir un ctor dans une classe abstraite.

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

Vous pouvez inclure un constructeur dans la classe abstraite et c'est comme cela que je le fais habituellement. Ou vous pouvez utiliser l'injection de propriété au lieu du constructeur que vous pourriez inclure dans l'interface.