2016-07-27 6 views
0

私は依存性注入を理解しようとしています。 私はこのためのサンプルの例を作成しました。 いずれかを教えてくださいすることができ、私が間違ってやっている手順何で私を導いてください 依存性の逆転についての明確化が必要

正しいか

public interface IEngine 
    { 
     void Start(); 
     void SayHelloFromEngine(); 
    }; 
    public class Engine :IEngine 
    { 
     public Engine(){ 
     } 
     public void Start() 
     { 
      Console.Write ("Hey it is started"); 
     } 
     public void SayHelloFromEngine() 
     { 
      Console.Write ("Hello from Engine"); 
     } 
    } 
    public class Car 
    { 
     private readonly IEngine _engine; 
     public Car(IEngine engine){ 
      _engine=engine; 
      _engine.SayHelloFromEngine(); 
     } 

    } 
本例であり、私のオブジェクトの作成は、

Car car2 = new Car (new Engine()); 

だろう。

答えて

0

あなたは私によく見えます。それは私が物事を構造化する傾向がかなりあります。

良いスタックオーバーフロースレッドhereと便利なリンクとポストがあります。

私は、実装を作成して依存関係を管理する方法を考えています。独自のファクトリクラス/メソッドを作成して作成することも、既存のフレームワーク(Ninjectなど)を使用することもできます。

+0

参考になりました – Sahithi

0

ガード句をコンストラクタに追加するのが一般的です。誰かがnull依存関係を渡そうとするとすぐに例外をスローすることができます。

public class Car 
{ 
    private readonly IEngine _engine; 
    public Car(IEngine engine) 
    { 
     if (engine == null) 
     { 
     throw new ArgumentNullException("engine"); 
     } 
     _engine=engine; 
     _engine.SayHelloFromEngine(); 
    } 
} 

依存性注入の大きな部分は、依存関係をどのように作成するかです。 Car car2 = new Car (new Engine());と言うと、あなたは依存性注入の目的を破るようなあなたの依存性をハードコーディングしています。すべての依存関係が定義されている単一のcomposition rootが必要です。あなたが何かを正しく実行しているかどうか分からない場合は、どこでも依存関係を避けてください。

もう1つ;あなたが依存関係を作っているときは、あなたが作ることの罠に陥らないようにしてください。service locator.

関連する問題