タグ

DIに関するs_ryuukiのブックマーク (112)

  • VContainerでFactoryを利用して、複数のComponentの依存を解決したPrefabを作る

    はじめに VContainerはめちゃめちゃ便利なDIコンテナですが、色々と依存性を解決するのが難しい場面もあります。 今回は[Inject]アトリビュートの付いた複数のComponentに対して依存を解決する書き方の一例を提示します。 状況 例えばPlayerCoreクラスとPlayerMovementクラスがあるとします。これらは同じPlayerというGameObjectに紐づいたPrefabとして利用されるという想定です。 これらのComponentには、それぞれ依存先があります。仮にFoo,Barとします。

    VContainerでFactoryを利用して、複数のComponentの依存を解決したPrefabを作る
  • C#と.NET 8を活用したコンソールアプリケーションにおける依存性注入の実装 - Qiita

    依存性注入(DI:Dependency Injection)は、ソフトウェア開発においてコンポーネント間の結合度を下げ、テストやメンテナンスを容易にするための重要なデザインパターンです。C#と.NET 8を用いたコンソールアプリケーションでの「依存性注入」の実装について説明します。 依存性注入コンテナの設定 .NET Core および .NET5以降では、Microsoft.Extensions.DependencyInjectionを使用して依存性注入をサポートします。これにより、アプリケーションの様々な部分で必要とされる依存関係を管理しやすくなります。

    C#と.NET 8を活用したコンソールアプリケーションにおける依存性注入の実装 - Qiita
    s_ryuuki
    s_ryuuki 2024/02/14
  • GitHub - mewlist/Doinject: Asynchronous DIContainer for Unity

  • 【C#】抽象クラスとインターフェースを併用する理由を考えた - Qiita

    業務で抽象クラスを継承し、インターフェースを実装しているクラスがあり、併用している意図が分からなかったので調べてみました。 結論 Template MethodとDIの組み合わせでした。 Template Method Template Methodは親クラスで大まかな処理を定義し、詳細は親クラスを継承した子クラスで実装するデザインパターンです。 親クラスで大まかな処理を定義しておくことで、子クラスごとに同じコードを書かずに共通化することができます。 DI オブジェクトの依存関係を外部から注入することで、クラス間を疎結合にするデザインパターンです。 DIを利用することでクラスの付け替えがしやすくなり、モックによるテストがしやすくなります。 例 クラス図 PRGでキャラクターを操作するCommnadクラスとキャラクターを共通化した抽象クラスのCharactorクラスがあります。 子クラスのW

    【C#】抽象クラスとインターフェースを併用する理由を考えた - Qiita
    s_ryuuki
    s_ryuuki 2023/12/14
  • 【C#】Dependency Injection(依存性の注入)とは - Annulus Games

    今回の記事はDependency Injection(依存性の注入)について。 設計についての学習を始めると「依存性の逆転」「Dependency Injection(依存性の注入)」「DIコンテナ」など言葉を耳にする機会が増えてくると思います。適切にDIを扱えるようになると設計の柔軟性が飛躍的に向上するため、是非とも習得したい知識です。 今回は「そもそもDependency Injection(依存性の注入)とは何なのか」という話から始め、サービスロケータやDIコンテナについてまで解説していきたいと思います。 またこの記事ではSOLID原則(特に依存性の逆転)等の知識を前提として進めるため、設計何もわからん!という方は以下の記事から読むことをお勧めします。記事の後半で依存性の逆転について触れているため、その辺りを押さえてからDIについて学ぶと良いでしょう。

    【C#】Dependency Injection(依存性の注入)とは - Annulus Games
  • ゼロから理解するDependency Injection - inSmartBank

    Dependency Injection (DI) とは、オブジェクトに必要な依存関係を外から注入する設計パターンです。 記事ではiOSアプリの実装をテーマに、DIがなぜ必要なのか、さらにはDI Containerとは何を解決するためにあるのかについて具体的な実装例をもとに解説します。 ※ 記事は iOS Test Night #12 にて発表した内容を書き起こしたものとなっております。 speakerdeck.com Dependency Injection 依存を内部で初期化する書き方 依存性逆転の原則に従った書き方 DI Containerの基 Daggerに学ぶ依存のライフタイム管理 SwiftUIアプリにおけるDI Containerの実装例 DI Containerの実装 Viewの実装 まとめ Dependency Injection Dependency Inject

    ゼロから理解するDependency Injection - inSmartBank
  • 【Unity】シンプルなDIコンテナを自作してみた - Qiita

    こんにちは! 株式会社OGIXのクライアントエンジニアのK.Iです。(OGIXについてはページ最下部で紹介しています!) 今回はUnityで扱うDIコンテナについて、内部のDI(依存性注入)の構造まで深く紹介している記事が少なかったので、ご紹介します。 まずDIとは DIは Dependency Injectionの略で、別名 依存性注入と呼びます。 プログラミングにおけるデザインパターンの一つで、オブジェクトを成立させるために必要となるオブジェクトの参照を実行時に注入(Inject)する手法のことです。 DIという概念自体はとてもシンプルで、 オブジェクトの生成時に注入を行うコンストラクタインジェクション、 生成後にメソッド経由で注入を行うメソッドインジェクションやセッターインジェクションなど DIという用語を知らなくても、普段から行っているこれらの処理のことを示します。 Unity

    【Unity】シンプルなDIコンテナを自作してみた - Qiita
  • [C#]DIコンテナのスコープ範囲を制御する - Qiita

    概要 ASP.NET Coreのコントローラから呼び出しているScopedサービスのクラスをバッチ処理からも呼び出そうとしたらエラーになった 原因はDIコンテナのスコープ範囲(ASP.NET Coreではリクエスト単位)がバッチ処理だと違ってくる為だった ASP.NET Coreと同様に、処理の呼び出し毎にDIコンテナのスコープを生成するようにしたらうまくいった 内容 次のようなASP.NET Coreのコントローラがあり、その中でMyLogicのDoWorkAsyncメソッドを呼び出している。 MyLogicには様々なScopedサービスが注入されており、DIコンテナを利用してコントローラに注入される。 ASP.NET Coreではサービスのスコープ範囲は「リクエスト単位」である為、DoWorkAsyncの呼び出しも基、1回毎に異なるスコープで呼び出されることになる。 public c

    [C#]DIコンテナのスコープ範囲を制御する - Qiita
    s_ryuuki
    s_ryuuki 2023/10/02
  • 「Xcode Previewを気軽に使うためのDI戦略」要約&補足

    はじめに この記事はiOSDC Japan 2023での「Xcode Previewを気軽に使うためのDI戦略」の要約と補足です。 スライドも公開しているので、そちらも併せてご確認ください。 発表を見ていない方のために要約を書いていますが内容自体は発表のものと同じかつ長いので、発表を見た方は要約をスキップして、いきなり補足から見ていただいて大丈夫です。 発表の要約 Xcode Previewをする上でのDI Xcode Previewを利用する上で、Dependency Injection (DI) は避けては通れないテーマです。 例としてAPI通信をして記事の一覧話取得する ItemListView を考えてみます。 struct ItemListView: View { @StateObject var viewModel = ItemListViewModel() var body:

    「Xcode Previewを気軽に使うためのDI戦略」要約&補足
  • C# 汎用ホストのDIにカスタムロガーを組み込む - Qiita

    このドキュメントの内容 任意のロガーを汎用ホストのDIに組み込む例です。 要件 今回は次の要件を満たすものを考えます。 汎用ホストの既定のログプロバイダに組み込む。 構成ファイルで独自のオプション値を設定できること。 実装方針 ILogger インターフェースを実装したロガークラスと ILoggerProvider インターフェースを実装したプロバイダークラスを実装します。 プロバイダークラスを汎用ホストが管理するログプロバイダーに登録します。 独自のプロパティを定義したオプションクラスを実装し、構成ファイルから読み込むようにします。 実装したコード SampleLogger クラス ログをコンソールに表示するだけのロガー。 /// <summary> /// サンプルロガー。 /// </summary> internal class SampleLogger : ILogger { /

    C# 汎用ホストのDIにカスタムロガーを組み込む - Qiita
    s_ryuuki
    s_ryuuki 2023/08/21
  • C# 汎用ホストのDIにデータベースプロバイダを組み込む - Qiita

    このドキュメントの内容 任意の機能を汎用ホストのDIに組み込む例です。ADO.NET データベースプロバイダを例に挙げて説明します。 要件 今回は次の要件を満たすものを考えます。 SqlDb, OleDb, Sqlite, ODP.NET など任意の種類の ADO.NET データベースプロバイダを扱えること。特定のプロバイダに依存しないこと。 構成ファイルでデータベースプロバイダの種類や接続文字列を設定できること。 複数の接続先を扱えること。 実装方針 データベースプロバイダの種類は文字列で表すものとします。 複数の接続先の設定をコレクションとして保持するオプションクラスを実装し、構成ファイルから読み込むようにします。 そのオプションクラスのインスタンスをDIから受け取り、コネクションを生成するファクトリクラスを実装します。このファクトリクラスのインスタンスもDIで管理します。 データベー

    C# 汎用ホストのDIにデータベースプロバイダを組み込む - Qiita
    s_ryuuki
    s_ryuuki 2023/08/07
  • DIP(依存性逆転の原則)を守っていない話

    一昨日くらいに 「DIP してもどうせ辛くなるよね」的なことを適当にツイートしたら引用 RT や RT 後言及やエアリプで言及された上に「こいつは設計を何も理解しとらん」みたいなことを言われた。「俺は当に何も理解していないのか?」と不安になったので、自分の考えをちゃんと書いておこうと思った。先に自分の立場を言うと、なんたらアーキテクチャとか SOLID 原則は有用だし自分も使うが、それを厳守しようとは思っていないと言う立場だ。 DIP とはなんだったか DIP(依存性逆転の原則)は SOLID 原則の一つで、一言で言うと「抽象に依存させると依存関係が逆転する」といったものだ。何のことやらという風になるので例だけ挙げると、UserRepository と UserService があってこのように定義すると class UserRepository { get() { return dat

    DIP(依存性逆転の原則)を守っていない話
  • クラスの依存関係を無くすメリット

  • Rust の DI を考える –– Part 2: Rust における DI の手法の整理 - paild tech blog

    paild 社でお手伝いをしている yuki です。前回に引き続き Dependency Injection 略して DI の話題を書いていきたいと思います。今回は Rust における DI についていろいろと考えてみました。今回紹介する実装はかなり単純な例を用いたもので、この記事からさらにみなさんのアプリケーションの実装状況に合わせていくつか工夫は必要になるかもしれません。ただ、とっかかりとしては十分なものになっていると思うので、DI でお困りの方はぜひ参考にしてみてください。 今回実装したいアプリケーションのお題について 今回紹介する技法の種別について コンストラクタインジェクション 静的ディスパッチを用いたもの 動的ディスパッチを用いたもの 静的ディスパッチと動的ディスパッチの利点・欠点 shaku (DI コンテナ)を用いたインジェクション shaku の利点・欠点 余談: DI

    Rust の DI を考える –– Part 2: Rust における DI の手法の整理 - paild tech blog
  • 大規模Unityゲーム開発の設計事例 〜ドメイン駆動設計とDIコンテナを導入した一年を振り返る〜 / cedec2021-ddd

    CEDEC2021 「大規模Unityゲーム開発の設計事例」の資料です。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - セッションの内容 現在開発中タイトルにおける、プログラム設計に関しての知識・経験を共有します。 ソーシャルゲーム開発では、作品を素早く完成させてリリースする事も大切ですが、同時にその後の継続的な運用開発についても考える必要があります。その際に重要になってくるのが設計です。 属人化を避けたり、メンテナンス性、制作スピードを維持するためにはメンバー間で統一された設計思想が必要だと考えました。 そのために私達は「ドメイン駆動設計(DDD)」と「DIコンテナ」という2つの手法を導入しました。 導入から一年が経ち、それらを振り返りつつ事例

    大規模Unityゲーム開発の設計事例 〜ドメイン駆動設計とDIコンテナを導入した一年を振り返る〜 / cedec2021-ddd
  • 依存性注入(Dependency Injection: DI)について理解する

    株式会社TOKIUMでAndroidエンジニアをしている渡邊(@error96num)です。ここ数年は"injection"というとワクチン注射が思い浮かびますが、記事ではアプリ開発において欠かせないinjection、依存性注入(Dependency Injection: DI)という概念について解説します。 対象読者 以下のような方を想定しています。 依存性注入(Dependency Injection: DI)に馴染みがなく、ざっくり理解したい DIフレームワークを使ったアプリ開発をしているが、基礎にたちかえってDIの目的やメリットについて今一度理解したい 依存性注入 (Dependency Injection: DI) Android公式のドキュメント[1]にも登場するCar, Engineクラスを使った例で、Kotlinでの実装を交えてDIについて解説します。 多くの場合、クラ

    依存性注入(Dependency Injection: DI)について理解する
  • VContainer/ZenjectでMonoBehaviourのインスタンスをまとめて索引可能にする方法 - Qiita

    はじめに 紹介したいこと ヒエラルキー上のMonoBehaviour継承型を収集して、 VContainer、またはZenjectのコンテナに登録する方法を紹介していきます! また、登録されたものを簡単に索引し、利用できるようにしてみました。 この方法を使うと、 シーン上にある個別のコンポーネントへの参照をDIパターンで注入することができます!! 紹介しないこと VContainer または Zenjectの基的な使い方は解説しません! Interfaceの書き方や実装方法については解説しません! 動作環境 Unity 2021.3.13f Extenject 9.2.0 (Zenject) or VContainer 1.12.0 おおまかな流れ 以下の流れにそって解説していきます! 途中、VContainerとZenjectで別々に解説します。使用しているフレームワーク版の内容を参照

    VContainer/ZenjectでMonoBehaviourのインスタンスをまとめて索引可能にする方法 - Qiita
  • DI(依存性の注入)はただ引数でインスタンスを渡せば良いってもんじゃない - Qiita

    この記事は何 DI(依存性の注入)を実施する際に、コードとしてはDIになっているけど上手く活用できていないパターンを見かけることがあります。 この記事では、DIをする際にこういう運用はしない方が良いよ、というところをまとめていきます。 DI(依存性の注入)とは 依存性の注入とは、上位レイヤーのオブジェクトを下位のレイヤーのオブジェクトから利用をする必要がある場合でも、 上位のレイヤーから下位のレイヤーを参照するような依存関係を作り上げるためのテクニックです。 依存関係は上位レイヤーから下位レイヤーへの一方通行にする、というのは保守性を高めるためにも非常に重要な考え方です。 一番わかりやすい例だと、データの永続化をするようなユースケースを実現する際に、ユースケース層より上位レイヤーであるインフラ層に属するDBクライアントなどを利用する必要がある、等の場合に活用できます。 DBクライアントに依

    DI(依存性の注入)はただ引数でインスタンスを渡せば良いってもんじゃない - Qiita
    s_ryuuki
    s_ryuuki 2023/01/14
  • [Unity]VContainerをとりあえず触ってみたい方へ - Qiita

    概要 Zenject(Extenject)と並んで注目されているDIライブラリVContainerを使ってみたので記事にまとめておきます。 文 導入 まずUnityで新規プロジェクトを作成して一旦Unityを終了します。 Finder(Windowsならエクスプローラ)からプロジェクトの入ったフォルダを開きます。 プロジェクトフォルダ > Packages > manifest.json ファイルの最後の行に1行追加します。バージョンは適宜公式ページを参考に修正してください。(あと、直前の行のカンマ抜けにご注意を) "jp.hadashikick.vcontainer" : "https://github.com/hadashiA/VContainer.git?path=VContainer/Assets/VContainer#1.12.0" using System; using Sy

    [Unity]VContainerをとりあえず触ってみたい方へ - Qiita
  • VContainerがどのように動いているのか読む

    この記事はUnityアドベントカレンダー1 12日目のエントリです。 VContainer便利ですよね。僕も良く使っており、たまにPull Requestなどを送ったりしています。 しかもOSSなのでコードも無料で読めてしまうんです。これはお得ですね。 あなたがVContainerを利用してコードを書いてる以上、不具合を見つけたときに「ライブラリ側かも?」と調査するときがいつか訪れるでしょう。その際に全く実装がわからないのと、ある程度の流れを知っているのとでは大きく変わってきます。 そんな来るべき時のために、今回はVContainerの内部実装をざっくりと見ていきましょう。 目的 VContainerのコードを追わなければならない!となったときの障壁を減らす。 あわよくばコントリビューターを増やす。 対象者 VContainerを使っている人 注意 今回は Pre IL Code Gene

    VContainerがどのように動いているのか読む