C#用のDIコンテナの使い方説明2019/04/25SHAREツイートシェアはてブLINEPocket先日、GitHubに自作のC#用DIコンテナをMITライセンスで公開しました。注意こちらのDIコンテナではコンストラクタにインジェクトするタイプだけをサポートしています。簡単に導入できるようにNugetパッケージで公開しています。Injection.Demo用クラスの紹介DIコンテナに登録していくクラス達です。基本の登録と調達はじめに最もシンプルな使い方を説明します。これからDemo用クラス2のHaveNoMeanConstructorクラスのインスタンスを調達しようと思います。その時HaveNoMeanConstructorクラスのコンストラクタに指定しているINoMeanInterfaceインターフェースにはNoMeanClassクラスのインスタンスをDIコンテナに作ってもらいたいとします。このDIコンテナの窓口はDiVendorクラスのインスタンスです。このDIコンテナでは調達したいクラスは全て登録する必要があります。今回で言うと内部で要求されるINoMeanInterfaceインターフェースを継承するNoMeanClassクラスと、HaveNoMeanConstructorクラスをRegisterメソッドで登録しておきます。この登録順は前後しても構いません。このように書いて実行すると、haveNoMeanConstructorには、中にNoMeanClassクラスのインスタンスを持ったHaveNoMeanConstructorクラスのインスタンスが代入されます。MEMO調達されるインスタンスは、何も設定しなければデフォルトでシングルトンかつ遅延作成されます。Registerメソッドの引数から変更することが可能です。DiVendorをDisposeすると、それまでに調達してもらうために作られた全てのインスタンスを破棄するよう試みます。この関数で破棄してもらうには、登録するクラスがIDisposableインターフェースを継承している必要があります。複雑なクラス構成の対応より複雑な状況にもある程度対応することができます。コンストラクタに注入する値は、デフォルトの自動解決の他に手動で決めておくことができます。それを実現するにはDiBlueprintクラスのインスタンスを作成する必要があります。これはDiArchitectクラスのインスタンスからCreateBlueprint<T>メソッドを使って作成することができます。DiBlueprintクラスにあるAppendArgumentInfo<T>メソッドをチェインしていくことで、引数の設定を付属させることができます。ここではコンストラクタにintとstringを持つLiteralConstructorクラスに、インスタンス生成時に任意の値を代入するよう設定しています。ここで生成されたDiBlueprintクラスのインスタンスをRegisterメソッドの引数に与えることで、調達時にその内容の通りに動作させることができます。nullを与えた場合の対応DiBlueprintクラスのAppendArgumentInfo<T>メソッドの引数にnullを与えた場合、DIコンテナが内部でインスタンスを調達する設定となります。実際にnullを代入したい場合は、第二引数をtrueとすることで、DIコンテナに調達させずにnullを代入させることができます。C#でStreamingしたときのメモこの記事を書いた人このえソフトウェアエンジニア幼少の頃から三度の飯よりコンピューターが好き。高校時代に自宅サーバーを始め、それ以来不定期に何かしらのサーバーを作っては畳んでを繰り返しています。本業はPCメーカーでソフトウェアエンジニアをやってます。コメントをキャンセル前の記事PCのバックアップをEaseUSへ鞍替えするか検討してみたカテゴリーITサーバープログラミングガジェット改造や交換の方法ゲームMODの入れ方サーバーの建て方レビューソフトウェア紹介おすすめの動画おすすめの本おすすめの音楽このえPCゲームのMODやサーバー、ITやソフトウェアの情報を発信しています。本業はソフトウェアエンジニア。レビューなどのお仕事も受け付けております。ご依頼はメールかTwitterにてお願いいたします。