2019/10/24 .NET Core 3.0 リリース記念 C# Tokyo 2019/10 発表資料
Dependency Injectionはじめの一歩2019/10/24.NET Core 3.0 リリース記念 C# Tokyo 2019/10
View Slide
自己紹介● ふるかわ @futa_ttjh● 都内IT企業勤務のエンジニア● C#、Xamarin.Formsが好き● Blog https://takataka430.hatenablog.com/2
本発表についてDependency Injectionについて、自分が調べて理解している、と思っている範囲のことを発表します。コードよりも図が多め間違いなどあれば教えてください!3
Today’s Goal以下のような方にDependency Injectionについてイメージしてもらう● Dependency Injection 初めて聞いた● Dependency Injection 聞いたことあるけどよくわからない● 依存性の注入?? 何それ怖い・・・4
アプリを作る上で大事なこと変化に強いことが重要!機能の追加顧客からの要望外部環境の変化・・・etc5
変化に強いとは???6
変化に弱い→クラス間で直接の依存関係がある場合7HogeHoge Class Contoso Class直接利用Contoso Classが必要public class HogeHoge{Contoso contoso = new Contoso();・・・コードで書くと
依存している事によるデメリット・あるクラスが特定の他のクラスに強く結びついている →カスタマイズが難しい・利用している外部のクラスがないと動かない →単体テストがやりにくい8
Dependency Injection(DI) とはあるクラスが別のクラスを利用するとき、インスタンスを外部から引き渡す仕組み(直接new はしない)9HogeHoge ContosoContoso Classが必要IContosoClass ClassInterface
コードでの例(DIを利用)public class HogeHoge{private IContoso _contoso;public HogeHoge(IContoso contoso){_contoso = contoso;}・・・10コンストラクタでインスタンスを外から受け取っている
【依存性の注入】の個人的理解11依存性→外側から持ってくる必要のあるインスタンス(オブジェクト)注入→クラスの中で生成するのではなく、引数として受け取る
Before After12Without DI With DIAppobj2obj3obj4Appobj1obj2obj3obj4obj1部品は固定 部品をカスタマイズできる
.NET Core におけるDI.NET Coreでは標準でDIをサポート13https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.0
Blazorでも使われています14https://docs.microsoft.com/ja-jp/aspnet/core/blazor/dependency-injection?view=aspnetcore-3.0
まとめ・クラスの結合が強いと変更に弱くなってしまう →そこでDI!・DIではオブジェクトを引数として受け取る・DIのメリット ・カスタマイズがしやすい ・単体テストがしやすい15
ご清聴ありがとうございました16