2010-11-19 19 views
0

私は、すべてのクラスが構築中にいくつかの依存オブジェクトと共にインスタンス化される必要があるクラスのセットを念頭に置いています。これらのクラスを考えてみましょう:クラスのセットへの依存性注入

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

私はDIがコンストラクタで場所を取るしたい、と明らかに私は、クラスA、B、C、Dは、いくつかの抽象クラスから継承するか、同じインターフェイスを実装します。

問題:インターフェイスまたは抽象クラスにコンストラクタを含めることはできません。

どうすればよいですか?非抽象基本クラスから継承しますか? 基本クラスは本当の意味を持ちません。 ファクトリメソッドを使用しますか?決してそれらを本当に好きではなかった...

何か提案がありますか?

答えて

3

もちろん抽象クラスでctorを使用できます。

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

抽象クラスにコンストラクタを含めることができます。それは私が通常行う方法です。または、インターフェイスに含めることができるコンストラクタの代わりにプロパティインジェクションを使用することもできます。

関連する問題