ASP.NET5の準備、問題3-新しい方法での依存関係の実装

SoftServeのテクニカルリーダーであるVictor Kotsiuban( Gbdrm )がASP.NET5コラムを続けています。 この記事では、VictorがASP.NET5の依存関係注入のための新しい組み込み機能の詳細を共有します。 このコラムの以前の記事は、 #aspnetcolumn -Vladimir Yunevでいつでも読むことができます。
依存性注入は、最も一般的で使用されている制御反転の形式の1つであり、OOPの重要な原理であり、モジュール間の相互依存性、相互接続性を減らすことができます。







多くの最新のフレームワークでは、依存性注入はすでにフレームワーク自体の一部です。 開発者はコンポーネントを作成し、依存関係を解決し、オンデマンドで他のコンポーネントに提供する組み込み機能を備えているため、これは大きなプラスです。これはソフトウェアプラットフォーム自体の内部で行われます。 さらに、依存関係の実装はプラットフォームでの作業の基本原則の1つであり、その無知はgovnokoda記述するためのフレームワークの非効率的な使用につながる可能性があります。



ASP.NET 5には、依存関係注入機能が組み込まれています。 他のそのようなアプローチの中でそれが許可するものとどのように際立っているかを以下で検討します。 また、実際に使用してみてください。



ASP.NET 5はベータ版であり、ここに記載されているすべては最終リリースの前に変更される可能性があります。 たとえば、少し前までは、プロパティを実装する可能性に重大な変化がありました。 しかし、このイノベーションの基本的な概念と主な方向性はすでに明確になっています。



基本とサービス登録



ビュー、コントローラーなどに必要なほとんどの依存関係 サービスはDIコンテナが管理する最小単位であるため、サービスとして実装されます。 最小限のASP.NET 5コンテナーの主要な機能は、IServiceProviderインターフェイスで作成されます。 このインターフェイスの唯一のメソッドは、オブジェクトGetService(Type serviceType)です。



コンテナでサポートされている4種類のサービス初期化(4種類のスコープ)があります。

  1. インスタンス-あなたが責任を持つ作成のための特定のオブジェクトを返します。
  2. 一時的-新しいオブジェクトが返されるたび。
  3. シングルトン-同じオブジェクトが常に返されます。
  4. 有効範囲-sigletonと同等ですが、この領域(たとえば、要求領域)にあります。


サービスは、アプリケーションの起動時、Startupクラス、ConfigureServices(IServiceCollectionサービス)メソッドで登録され、ServiceCollectionコレクションには、対応するスコープを持つサービスを追加するメソッドもあります(図1)。









図1 -クラス図



ServiceCollectionコレクションの拡張メソッドの使用例:



public virtual void ConfigureServices(IServiceCollection services) { var settings = new Settings(); services.AddInstance(settings); services.AddScoped<IProductService, ProductService>(); services.AddSingleton<TestService>(); }
      
      





登録後、サービスはビューで使用できるだけでなく、DI経由で呼び出されたすべてのクラスで使用できます。



コントローラーにサービスを実装します



コントローラーでの実装では、すべてが非常に簡単です-コントローラーのコンストラクターを介して行われます。



 public class HomeController : Controller { private readonly IApplicationEnvironment _appEnvironment; private readonly IProductService _productService; public HomeController(IProductService productService, IApplicationEnvironment appEnvironment) { _appEnvironment = appEnvironment; _productService = productService; } // ... }
      
      





そして、他に何もする必要はありません。 登録されたサービスは、コンストラクターパラメーターとして使用できます。

アプリケーションでEntityFrameworkを使用する場合、DIの使用を検討する最初の依存関係の1つはDbContextです。 これにより、DbContextとの結び付きが少なく、そのような機能を簡単にテストできるコードなどを作成できます。



例:

github.com/gbdrm/aspnet5/blob/master/src/aspnet5/Controllers/HomeController.cs#L12-L17



ビューの紹介



ビュー(* .cshtml)で登録済みサービスを使用する興味深い機会もあります。



 @model SomeViewModel @inject SomeContext SomeContext <h1>@SomeContext.PageTitle</h1> <!-- HTML -->
      
      





@injectディレクティブは、SomeContextサービスを使用することをプレゼンテーションエンジンに伝えます。 また、ビュー自体では、このサービス(この場合はPageTitleプロパティ)を既に使用できます。



ビューでサービスを使用することに加えて、もう1つの興味深い革新は入力の設定です。 サービスの登録に加えて、この構成を特定のタイプに変換する前に、構成の一部を「登録」することができ、これはほんの数行のコードで実行できます。

ビューに型指定された構成を実装する例:

github.com/gbdrm/aspnet5/commit/88dc1e708f89edfd30a55ae90265cde9074ae312



プロパティへの埋め込みと消えた場所[アクティブ化]



以前は、[Activate]属性を使用すると、プロパティに対応するサービスをプルできました。 しかし、開発者はこれを放棄することにしました。 これの主な理由は、依存性注入のための他のライブラリとの互換性の問題、およびデバッグの複雑さです。 これについてはしばらく議論が行われましたが、多くの詳細はここで読むことができます: github.com/aspnet/Mvc/issues/2151、github.com/aspnet/Announcements/issues/28



しかし、それでも、[FromServices]属性を使用して、プロパティを介して依存関係を注入する機能は残りました。



テストクラスを作成し、コンテナーに追加して、コントローラープロパティに実装してみましょう。

github.com/gbdrm/aspnet5/commit/3d09ef0c5b6d079884337a6e044262659a4f6250



おわりに



フレームワークレベルでの依存性注入は、依存関係の処理を統合するための優れたメカニズムです。 ASP.NET 5の実装は透過的で理解しやすく、構成は非常に簡単です。 実装はベータ版ですが、ほとんどの機能はすでに安定しており、完全な開発の準備が整っています。 すべてのコンテナソースはGitHub-github.com/aspnet/DependencyInjectionで入手できます。 作業はまだ進行中です。機能だけでなく、プラットフォームの一部がどのように作成されるかを知ることができます。 asp.net 5の依存性注入について詳しく知りたい場合は、次の優れた記事(英語)を参照してください。www.emadashi.com / 2015/06 / dependency-injection-in-asp-net-5-one-step-より深い



aspnetcolumngithub アドバイス! また、ASP.NET5テーマに興味がある場合は、例を参照したり、自分で何かを追加したり、プロジェクトの機能を実装するためのリクエストを作成したりすることができます。例: github.com/gbdrm/aspnet5


最新のニュース



既にご存じのとおり、ASP.NET5 Beta5でVisual Studio 2015がリリースされました。 Visual Studioリリースに正確に含まれるものの詳細については、 このブログをご覧ください



ASP.NET5 Beta6更新プログラムがリリースされ、多くの変更、改善、バグ修正が行われました。 アップデートの詳細については、 このブログをご覧くださいこのリンクから更新をダウンロードできます。



ASP.NET5の最終バージョンのリリースの数か月前にプラットフォームリリースをリリースする計画が公開されています。 彼らによると、Beta7とBeta8のバージョンは私たちを待っており、その後11月に本番用の最初のバージョン(RC1)を受け取り、最終バージョンは2016年の第1四半期にリリースされます。 各バージョンの詳細については、 こちらをご覧ください



Web開発やASP.NETを含む、DevCon 2015カンファレンスの公開レポート



便利なリンク



最新のASP.NET5ドキュメントはhttp://docs.asp.net/en/latest/にあります



Microsoftチームの開発者がプラットフォームに関する最新ニュースを共有するASP.NET 5コミュニティスタンドアップ定期ショーのライブブロードキャストに参加することをお勧めします。 エントリーはこのリンクから入手できます。



Visual Studio CodeでのASP.NETアプリケーションの開発に関する新しい記事であるEric Reitanをご覧ください。VSCodeでWebプロジェクトを操作する興味深い側面について詳しく説明しています。



Microsoftの新しい無料の仮想アカデミーコースでASP.NET5の基本を学びます。



著者向け



ご友人、ご自身の資料でコラムをサポートすることに興味がある場合は、すべての詳細を議論するためにvyunev@microsoft.comまでご連絡ください。 ASP.NETおよびその他のトピックについて興味深い話ができる著者を探しています。



著者について



コチュバンビクター

SoftServeの技術リーダー

Gbdrm



8年以上の経験を持つ.NET開発者。 エンタープライズWebプロジェクトのスペシャリスト。 過去4年間、彼は技術的リーダーでした。



All Articles