[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

タグ

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

  • Zenject入門その1 疎結合とDI Container

    はじめに 最近、Zenjectについて導入を検討する人が増えてきました。今回はそのZenjectがそもそも何のためのライブラリなのかを解説します。 Zenjectとは 「Zenject Dependency Injection IOC」は依存性の注入のためのフレームワークと言われています。 よくある勘違い Zenjectを導入すると、次のようなことができるようになると思っている人が多いですが、それは間違いです。 Zenjectを入れると疎結合になる! Zenjectを入れるとテストが書きやすくなる! 何かよくわからないけど入れるとプログラムが書きやすくなる! 繰り返しますが、上記の認識は間違いです。 Zenjectの正しい説明 Zenjectは疎結合な設計やテストを書きやすくするためのライブラリではありません。 順序が逆で、疎結合やテストのことを考えて設計したときに発生してしまう問題を解決

    Zenject入門その1 疎結合とDI Container
  • まだオブジェクト参照で消耗してるの? Zenjectではじめる疎結合なUnityアプリ開発 - Qiita

    こんなことありませんか? 「ボタンを押したら立方体が出る」という簡単なシーンを作ってみましょう。 「ボタンを押したら立方体が出る」最初の実装 ナイーブに作ると、こんな感じになりますよね。 ボタンのOnClickにCubeのMesh Rendererへのオブジェクト参照を作って、enabledをtrueにするように設定してます。 これで、ボタンを押したら立方体が出るようになりましたね! では、このCubeを別のGameObjectに入れ替えたらどうなるでしょうか? また、Cubeが増えたらどうなるでしょうか? Cubeを別のGameObjectに入れ替えたら? オブジェクト参照がMissingになって動かなくなります。 修正するには、手作業でオブジェクトを登録しなおさないといけません。 Cubeが増えたら… ひとつずつ登録しないといけないですよね。 こうなる。Cubeが増えるたびに登録しない

    まだオブジェクト参照で消耗してるの? Zenjectではじめる疎結合なUnityアプリ開発 - Qiita
  • Zenjectの動作速度を検証した - Qiita

    概要 最近Zenjectを使っていましたが、なんとなくInjectが重い気がしたので、具体的に動作速度を調べてみました。 調査方法 PrefabにおけるFactory.Createの動作速度を調べたい 毎フレーム下記のPrefabをFactory.Create&Destroyを行ってグラフを見る 1個のGameObjectに対して、1個のComponent 201個のGameObjectに対して、1個のComponent 201個のGameObjectに対して、201個のComponent 1個のGameObjectに対して、201個のComponent ここで割増に使うComponentはInject属性を使っていない コード using Zenject; public class TestInstaller : MonoInstaller { public override void

    Zenjectの動作速度を検証した - Qiita
  • Zenjectでシングルトンかつ破棄されないGameObjectのDI - 適当おじさんの適当ブログ

    概要 Zenject は言わずと知れた有名なDIフレームワークです。Zenjectの ProjectContext を使ってタイトルに書いてあることを実現したので、そのときのメモです。 GitHub - modesttree/Zenject: Dependency Injection Framework for Unity3D ProjectContext とは Zenjectでは、シーンごとに適した依存関係を SceneContext として定義するのが普通です。一方で、すべてのシーンに共通して、永続的な依存関係を定義したい場合があります。それらの依存関係は ProjectContext として定義します。 SceneContextの存在するシーンが読み込まれた場合に、ProjectContextのInstallerが先に実行され、依存関係がバインディングされます。そのため、Projec

    Zenjectでシングルトンかつ破棄されないGameObjectのDI - 適当おじさんの適当ブログ
  • ZenjectのFactoryを使いました - Qiita

    UnityでDIのパッケージとして流行ってるそうなので少し使って見ました。 オブジェクト(特にGameObject)を生成するFactoryに注目して使っていきたいと思います。 Factory基 生成するオブジェとしてBaseCubeを用意します。 BaseCube.cs デモに倣ってFactoryを作っておきます。

    ZenjectのFactoryを使いました - Qiita
  • 【Unity】ZenjectのAsSingle(),AsCached(),AsTransient()の違い - かせノート。

    Zenject使うじゃん AsSingleでBindするじゃん UnBindするじゃん もう一回Bindするじゃん Injectされない!!!!!! AsTransient使えば解決なんだけど、GC走って回収されてるのにキャッシュ残ってるってどういうことなんなんなん— ペンギン (@YutaDevelop) 2017年4月21日 調べてみた。 超適当にテストコード書いて挙動を確かめた メソッドの名前が意味不明なのは許してほしい gist.github.com 挙動を理解しないとヤバい事故生みそうだなこれという結果になった 結果的にはAsSingle()でInjectされてる参照がUnbindで破棄されてなくて、Inject済みの参照をもう一回Bindし直してた あとGCで回収されてなかった そもそも As〜ってなんぞやというと BindするクラスやインスタンスのBind方法の定義である h

    【Unity】ZenjectのAsSingle(),AsCached(),AsTransient()の違い - かせノート。
  • 【Unity】Zenjectをマルチシーンで使うときの3つの方法 - かせノート。

    Zenject関係の過去記事 yutakaseda3216.hatenablog.com yutakaseda3216.hatenablog.com マルチシーンでZenjectを使う 少し慣れてきた人向けです Zenjectの中核となるDiContainerは、SceneContextというクラスに紐付いている SceneContextが破棄されることでBindされていたデータも破棄されてしまうため、シーンを跨いでSceneContextが破棄される場合、データを保持できない また、複数シーンを使用する場合、各々にSceneContextが存在する場合、何もしなければContext間でBindされたインスタンスは共有されない そのため、マルチシーン用の機能を使う必要がある 方法は三種類ある 1.ProjectContextを使用する https://github.com/modesttr

    【Unity】Zenjectをマルチシーンで使うときの3つの方法 - かせノート。
  • Zenjectとマルチシーン - kurihara-nの日記

    Zenjectを採用したプロジェクトにおいて、 マルチシーンへ対応する場合にはいくつかの方法があります。 Zenjectのベーシックな使い方は、 シーンにSceneContextを配置して、 そのオブジェクトにInstallerを配置していくことで、 シーンごとの構成を用意していくというものです。 そのままだとUnityでシーンの変更をしたときに 関連性が持てず、それぞれ参照できなくなるので、 前のシーンでBindしたオブジェクトを、 次のシーンで参照するということができません。 方法としては、 ProjectContext というグローバルなコンテキストを用意する Sceneの親子つけを行いマルチシーン構成にする DecoratorContext Project Context https://github.com/modesttree/Zenject#global-bindings-u

    Zenjectとマルチシーン - kurihara-nの日記
  • Zenjectの導入 - kurihara-nの日記

    UnityのためのDependency Injection フレームワークにZenjectというものがある。 つい最近知ったものだけれども、 使えるシーンが多いと思うので現状把握している範囲でまとめておこうと思う。 Github GitHub - modesttree/Zenject: Dependency Injection Framework for Unity3D Asset store https://www.assetstore.unity3d.com/jp/#!/content/17758 知ったきっかけはこちらのAmingさんの開発者ブログ Unity3DのDIフレームワーク、Zenjectの紹介 | Aiming 開発者ブログ via Unityまとめ Unityを日頃使っていて、 なんとなく感じている痒いところの解決の助けになりそうに思っていて、 例えば、どうしてもシング

    Zenjectの導入 - kurihara-nの日記
  • Zenjectを使ってゲームっぽい面倒なテストを楽に書く - Qiita

    using System.Collections; using System.Collections.Generic; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; using Zenject; [TestFixture] public class TestBattleUnit : ZenjectIntegrationTestFixture { public const int PlayerID = 1; public const int PlayerHealth = 20; public const int PlayerAttack = 5; public const int EnemyID = 2; public const int EnemyHealth = 8; public const

    Zenjectを使ってゲームっぽい面倒なテストを楽に書く - Qiita
  • 猿でも分かる! Dependency Injection: 依存性の注入 - Qiita

    はじめに アホでもわかるように解説してみるテスト。 あらゆる方向で説明してみる。 大雑把にまとめると「依存していた部分を、外から注入すること」です。 勘違い、間違いが沢山ありそうなので、是非ご指摘を! 登場人物 (用語) 依存性の注入 (日語) Dependency Injection (英語) DI (Dependency Injectionの略語) 依存関係を設定ファイル等で定義してよろしくやってくれる「DIコンテナ」については書いておりません! 何が問題なの? クラス内などで固定化されたものがあると 柔軟性がない テストしにくい 解決方法 「依存している部分を外から注入する」 DIにおける「依存性」と「注入」の意味 依存性 (大雑把に)とあるクラスに、固定の定数、変数、インスタンスが入っちゃっている状態 つまりそのクラスは、その定数、変数、インスタンスに依存している 注入 そのクラ

    猿でも分かる! Dependency Injection: 依存性の注入 - Qiita
    s_ryuuki
    s_ryuuki 2018/03/04
  • ZenjectでオブジェクトのTestRunnerを作る - Qiita

    とりあえずTestRunnerで動かす時にどうするのか、流れをしるために簡単な例を試してみる 追記)今回はZenjectのフレームワークでテストするだけだったのでタイトル変えました。次回以降ちゃんとバインドします。 追記: もうちょいちゃんとゲームぽいの書きました。 環境 Uniry 2017.3.0f3 Mac OSX 10.12.6 ビルドターゲットMacOSX .NET 4.6相当 簡単なテストの確認 Githubのドキュメントが手元環境ではうまくいかなかったので以下のテストケースに変更 ※具体的には PreInstall()とPostInstall()を呼んでいない Assert.ThrowsでTActualの型を要求される の二点が問題となっていた。 修正した版はGistにでも貼っておきます。 家にもプルリクしといたけど、プルリク素人のためrejectされちゃいそうなので。 u

    ZenjectでオブジェクトのTestRunnerを作る - Qiita
  • 【Unity】Zenjectに学ぶDependency Injection - Qiita

    概要 この記事は モバイルファクトリー Advent Calendar 2017 11日目の記事です。 10日目の記事は @tsukumaruさんの 「OpenMapTilesとgo-staticmaps」 でした。 記事ではUnityのDIフレームワークであるZenjectからDIについて学んだことをツラツラと書いていくものです。 DI(Dependency Injection)とは 別の呼び方としてはIOC(Inversion of Control: 制御の反転)とも呼ばれるそうです。 --- 追記 2017/12/12 --- IOCの実装手法としてDIが存在している、という関係が正しそうです。 https://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E3%81%AE%E5%8F%8D%E8%BB%A2 --- 追記終わり --- Depe

    【Unity】Zenjectに学ぶDependency Injection - Qiita
  • ZenjectとUniRx.MessageBrokerの相性が抜群 - Qiita

    Unityゲームを開発をする上でEventのPub/Subシステムを作るのは必須で、そのベースをどのように作るかというのは、いつも頭を悩ませたりするのではないでしょうか。 よくあるのは、以下の様なものかと ActionなどのCallbackでイベントのデータを受け取る UnityEventなどを使用する と、メソッドベースで、HogeEvent(hogeEventData) みたいにメソッド+イベントのデータで実装することが多いように思えます。 そこで、一種の方法としてまずは、UniRx.MessageBrokerを紹介します。 注意事項 以降の説明は、UniRxとZenjectについて全く知らないという状態だとわかりづらいかと思います。 ですが、UniRx/ZenjectはUnity開発において勉強しておいて損はありません! (利益しかないかもしれない) UniRx.MessageBro

    ZenjectとUniRx.MessageBrokerの相性が抜群 - Qiita
  • Unity開発で使える設計の話+Zenjectの紹介

    4. おしながき • 設計とは – 設計とは何か、設計の何がよいのか – モデリングとクラス設計 • 覚えておくべき基礎知識 – クラス図の読み方 – SOLID原則 – デザインパターン • Zenjectの紹介 – 依存性注入とは何か • まとめ

    Unity開発で使える設計の話+Zenjectの紹介
  • Unity1週間ゲームジャムに参加してUniRxとZenjectを使ってみた話 #unity1week - naichi's lab

    先週久しぶり(約3ヶ月ぶり)にUnity1週間ゲームジャムを開催し、おかげさまで160もの作品を投稿いただきました!! https://unityroom.com/unity1weeks/7 参加いただいたみなさま、ありがとうございました。 まだ全然遊びきれていませんが、少しずつ遊んで感想を残していきたいと思います。 今回は私も参加できたので、この記事にまとめておこうと思います。 作った作品 参加目的と個人目標 Unityのリハビリがしたかった アセットストアさんのキャンペーンが後押し UniRxとZenjectを使いたい MV(R)P と DI について MV(R)P (Model, View, Reactive Presenter) DI 実装について モデル ビューとプレゼンター UniRxとZenjectについて 他に使ったアセット DOTween Pro Advanced Pla

    Unity1週間ゲームジャムに参加してUniRxとZenjectを使ってみた話 #unity1week - naichi's lab
  • neue cc - MicroResolver - C#最速のDIコンテナライブラリと、最速を支えるメタプログラミングテクニック

    MicroResolver、というDIコンテナを作りました。Microといいつつ、フルフルではないですがそれなりにフルセットな機能もあります。DIの意義とか使い方とかは割とどうでもいい話なので、何をやったら最速にできるのかってところを中心に説明しますので、DIに興味ない人もどうぞ。 GitHub - neuecc/MicroResolver Install-Package MicroResolver 例によってインストールはNuGetからで、.NET 4.6 から .NET Standard 1.4 で使えます。 DIコンテナはIoC Performanceという、存在するDIライブラリは全部突っ込んだ総合ベンチマークがあるので、そこで好成績を出せれば勝ったといえるでしょう。 |Container|Singleton|Transient|Combined|Complex| |:------

    s_ryuuki
    s_ryuuki 2017/07/17
  • 【Unity】Zenjectで禅の心を手に入れる - かせノート。

    Zenjectについて github.com 導入を躊躇っていたものの、あるところから脅しがかかったので格的に使い始めた 基的な使い方などはこちらをご参考いただければわかるのではないかと思います Unity3DのDIフレームワーク、Zenjectの紹介 | Aiming 開発者ブログ 今回はちょっと具体的な使い方を模索してみました。 何ができるのか リポジトリのreadmeを読めばわかる DI(Dependancy Injection)を行うためのライブラリで、すっごい簡単に言うと newの引数とか、シングルトンで引っ張ってきてたオブジェクトを、登録しておいたオブジェクトの中から勝手に引っ張ってきて自動で参照を入れてくれるやつ って認識でいいと思う、もちろんこれは機能のごく一部に過ぎない 他にもいろいろできる、公式読んで 中身の話 Zenjectの基は Containerにオブジェク

    【Unity】Zenjectで禅の心を手に入れる - かせノート。
  • Zenject READMEの日本語訳 - Qiita

    注意 2017年のZenjectのREADMEの訳です。参考程度にとどめGitHub上のREADMEを読むことをおすすめします。 ちょっとした説明 ZenjectのREADMEの日語訳です。勉強用に全部ちゃんと読もうと思い翻訳してみました。 8割ぐらいの英文をGoogle翻訳で翻訳しました。 (殆どの訳にあまり違和感がないので、Google翻訳の精度すごい...) 場合によっては原文を呼んだほうがわかりやすいものもありますので、ご注意を。 時間をかけて他のmdファイルも翻訳していこうと思います。 原文:https://github.com/modesttree/Zenject Dependency Injection Framework for Unity3D Introduction Zenjectは、Unityを対象とするために特別に構築された軽量依存性注入フレームワークです(ただし

    Zenject READMEの日本語訳 - Qiita
  • 「なぜDI(依存性注入)が必要なのか?」についてGoogleが解説しているページを翻訳した  - Qiita

    イマイチ理解しきれていなかったDIに関して調べていところ、Google Guiceの解説がすごく分かりやすかったので、和訳してみました。 (ところどころ意訳気味です。明らかに解釈の誤った訳がありましたら、ご指摘ください) ちなみにGoogle Guiceというのは、Googleが開発したDIライブラリです。この例ではJavaが使用されていますが、Scalaでも使用可能です。最近Play Frameworkでも採用されたので話題になっているようです。 用語の定義 文を読む前に目を通すことで、内容をスムーズに理解できます。 用語 意味 文中の例

    「なぜDI(依存性注入)が必要なのか?」についてGoogleが解説しているページを翻訳した  - Qiita