タグ付けされた質問 「dependency-injection」

機能させる必要のあるソフトウェアコンポーネントの依存関係を動的に挿入することにより、コンポーネント間の結合を減らす設計パターン。

8
wcfサービスのコンストラクターに値を渡すにはどうすればよいですか?
サービスを実装するクラスのコンストラクターに値を渡したいのですが。 ただし、ServiceHostでは、作成する型の名前のみを渡すことができます。コンストラクタに渡す引数は渡されません。 サービスオブジェクトを作成するファクトリを渡すことができるようにしたいと思います。 これまでに見つけたもの: WCF Dependency Injection Behaviorは、私が探している以上のものであり、私のニーズに対して複雑すぎるようです。

9
WPF / MVVMアプリケーションで依存性注入を処理する方法
新しいデスクトップアプリケーションを開始していますが、MVVMとWPFを使用してそれを構築したいと考えています。 また、TDDを使用するつもりです。 問題は、IoCコンテナーを使用して、プロダクションコードに依存関係を挿入する方法がわからないことです。 次のクラスとインターフェイスがあるとします。 public interface IStorage { bool SaveFile(string content); } public class Storage : IStorage { public bool SaveFile(string content){ // Saves the file using StreamWriter } } 次にIStorage、依存関係を持つ別のクラスがあります。このクラスがViewModelまたはビジネスクラスであるとします... public class SomeViewModel { private IStorage _storage; public SomeViewModel(IStorage storage){ _storage = storage; } } これにより、モックなどを使用して、ユニットテストが適切に機能することを確認するユニットテストを簡単に作成できます。 問題は、実際のアプリケーションで使用することです。IStorageインターフェイスのデフォルト実装をリンクするIoCコンテナが必要であることはわかっていますが、どうすればよいですか? たとえば、次のxamlがあるとどうなりますか。 <Window …

2
AndroidプロジェクトでDAGGER依存性注入を最初からセットアップする方法は?
ダガーの使い方は?Androidプロジェクトで機能するようにDaggerを構成するにはどうすればよいですか? AndroidプロジェクトでDaggerを使用したいのですが、混乱します。 編集:Dagger2も2015年4月15日からリリースされており、さらに混乱しています! [この質問は「スタブ」であり、Dagger1についてさらに学び、Dagger2についてさらに学びながら、私は私の答えに追加しています。この質問は、「質問」というよりはガイドにすぎません。]

6
依存性注入のためのGoogle Guice対PicoContainer
私のチームは依存関係注入フレームワークを調査しており、Google-GuiceとPicoContainerのどちらを使用するかを決定しようとしています。 私たちは私たちのフレームワークでいくつかのものを探しています: 小さなコードフットプリント-小さなコードフットプリントとは、依存関係注入コードをコードベースのいたるところに残したくないということです。将来的にリファクタリングする必要がある場合は、できるだけ簡単にする必要があります。 パフォーマンス-オブジェクトを作成および挿入するときに、各フレームワークにはどのくらいのオーバーヘッドがありますか? 使いやすさ-大きな学習曲線はありますか?単純な機能を実現するためにコードの山を書かなければならないのでしょうか できる限り少ない構成にしたい。 コミュニティの規模-コミュニティが大きいということは、通常、プロジェクトが継続して維持されることを意味します。私たちはフレームワークを使いたくないので、私たち自身のバグを修正する必要があります;)また、途中で私たちが持っている質問は(うまくいけば)フレームワークの開発者/ユーザーコミュニティによって答えられるでしょう。 リストされた基準に対する2つのフレームワークの比較は大歓迎です。2つを比較するのに役立つ個人的な経験も非常に役立ちます。 免責事項:私は依存性注入にかなり慣れていないので、この議論に関係のない質問をした場合、私の初心者には言い訳にはなりません。

6
「ルーターアウトレット」の子コンポーネントにデータを渡す
サーバーに行き、オブジェクトをフェッチする親コンポーネントを持っています: // parent component @Component({ selector : 'node-display', template : ` <router-outlet [node]="node"></router-outlet> ` }) export class NodeDisplayComponent implements OnInit { node: Node; ngOnInit(): void { this.nodeService.getNode(path) .subscribe( node => { this.node = node; }, err => { console.log(err); } ); } そして、いくつかの子供たちのディスプレイの1つ: export class ChildDisplay implements OnInit{ @Input() node: …

4
Symfony 2 EntityManagerインジェクションインサービス
独自のサービスを作成し、Doctrine EntityManagerを挿入する必要がありますが、それが__construct()サービスで呼び出されていることがわかりません。インジェクションが機能しません。 コードと構成は次のとおりです。 <?php namespace Test\CommonBundle\Services; use Doctrine\ORM\EntityManager; class UserService { /** * * @var EntityManager */ protected $em; public function __constructor(EntityManager $entityManager) { var_dump($entityManager); exit(); // I've never saw it happen, looks like constructor never called $this->em = $entityManager; } public function getUser($userId){ var_dump($this->em ); // outputs null } …


3
AngularJSシード:JavaScriptを個別のファイルに入れる(app.js、controllers.js、directives.js、filters.js、services.js)
私はアプリケーションを構築するために山形シードテンプレートを使用しています。最初に、すべてのJavaScriptコードを単一のファイルに入れましたmain.js。このファイルには、モジュール宣言、コントローラー、ディレクティブ、フィルター、サービスが含まれています。アプリケーションはこのように正常に動作しますが、アプリケーションがより複雑になるため、スケーラビリティとメンテナンス性が心配です。Angular-seedテンプレートにはこれらのファイルごとに個別のファイルがあることに気付いたので、コードを単一のmain.jsファイルからこの質問のタイトルに記載されている他の各ファイルに配布しようとしましたapp/jsが、angularのディレクトリで見つかりました-シードテンプレート。 私の質問は、アプリケーションを機能させるために依存関係をどのように管理するのですか?既存の文書が見つかりました。ここでは例の各番組に、単一のJavaScriptソース・ファイルを指定したので、非常にこの点では明らかではありません。 私が持っているものの例は: app.js angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.controllers']); controllers.js angular.module('myApp.controllers', []). controller('AppCtrl', [function ($scope, $http, $filter, MyService) { $scope.myService = MyService; // found in services.js // other functions... } ]); filters.js angular.module('myApp.filters', []). filter('myFilter', [function (MyService) { return function(value) { if (MyService.data) { // test to ensure service is loaded …

7
UnityのResolve()メソッドにコンストラクターパラメーターを渡すことはできますか?
依存関係の注入にMicrosoftのUnityを使用しており、次のようなことをしたいと思っています。 IDataContext context = _unityContainer.Resolve<IDataContext>(); var repositoryA = _unityContainer.Resolve<IRepositoryA>(context); //Same instance of context var repositoryB = _unityContainer.Resolve<IRepositoryB>(context); //Same instance of context IDataContext context2 = _unityContainer.Resolve<IDataContext>(); //New instance var repositoryA2 = _unityContainer.Resolve<IRepositoryA>(context2); RepositoryAそして、RepositoryBの両方を取るコンストラクタ持っているIDataContextパラメータを、と私はUnityが、私はそれを渡すことをコンテキストにリポジトリを初期化したいです。また、IDataContextがUnityに登録されていないことにも注意してください(の3つのインスタンスは必要ありませんIDataContext)。

7
@ComponentScanから@Componentを除外する
@ComponentScan特定のから除外したいコンポーネントがあります@Configuration: @Component("foo") class Foo { ... } そうでなければ、それは私のプロジェクトの他のクラスと衝突するようです。衝突についてはよくわかりませんが、@Component注釈をコメントアウトすると、思い通りに動作します。ただし、このライブラリに依存する他のプロジェクトでは、このクラスがSpringによって管理されることを想定しているため、自分のプロジェクトでのみスキップしたいと思います。 私は使ってみました@ComponentScan.Filter: @Configuration @EnableSpringConfigured @ComponentScan(basePackages = {"com.example"}, excludeFilters={ @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class)}) public class MySpringConfiguration {} しかし、それは機能していないようです。を使用しようとするとFilterType.ASSIGNABLE_TYPE、一見ランダムに見えるクラスを読み込めないという奇妙なエラーが発生します。 原因:java.io.FileNotFoundException:クラスパスリソース[junit / framework / TestCase.class]が存在しないため、開くことができません 私もtype=FilterType.CUSTOM次のように使用してみました: class ExcludeFooFilter implements TypeFilter { @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { return metadataReader.getClass() == Foo.class; } } @Configuration …

6
再起動して、すでにブートストラップされたアプリケーションに依存関係を追加します
すでにブートストラップされた角度モジュールに遅い依存関係を注入する方法はありますか?これが私の意味です: 次のように定義されたサイト全体の角度アプリがあるとします。 // in app.js var App = angular.module("App", []); そして、すべてのページで: <html ng-app="App"> 後で、アプリを再度開いて、現在のページのニーズに基づいてロジックを追加します。 // in reports.js var App = angular.module("App") App.controller("ReportsController", ['$scope', function($scope) { // .. reports controller code }]) さて、(のようなロジックのものとオンデマンドのビットの1つは、独自の依存関係を必要と言うngTouch、ngAnimate、ngResource、など)。それらを基本アプリにどのように添付できますか?これはうまくいかないようです: // in reports.js var App = angular.module("App", ['ui.event', 'ngResource']); // <-- raise error when App was already bootstrapped …

2
Guiceのインジェクターから注釈付きインスタンスを取得するにはどうすればよいですか?
モジュールがあるとしましょう: Module extends AbstractModule { @Override protected void configure() { bind(String.class). annotatedWith(Names.named("annotation")). toInstance("DELIRIOUS"); } } モジュールをテストして、クラスとフィールドがなくても、インジェクターから直接値を取得して、String注釈が付けられたフィールドに正しい値を挿入するかどうかを確認したいと思いますNames.named("annotation")。 @Test public void test() { Injector injector = Guice.createInjector(new Module()); // THIS IS NOT GOING TO WORK! String delirious = injector.getInstance(String.class); assertThat(delirious, IsEqual.equalTo("DELIRIOUS"); }

7
依存性注入とシングルトンデザインパターン
依存性注入またはシングルトンパターンをいつ使用するかをどのように識別しますか。「シングルトンパターンよりも依存性注入を使用する」と書かれている多くのWebサイトを読んだことがあります。しかし、私がそれらに完全に同意するかどうかはわかりません。私の中小規模のプロジェクトでは、シングルトンパターンの使用は間違いなく簡単です。 たとえば、ロガー。使用できますLogger.GetInstance().Log(...) が、これの代わりに、作成したすべてのクラスにロガーのインスタンスを挿入する必要があるのはなぜですか?

2
依存性注入のためのリーダーモナド:複数の依存性、ネストされた呼び出し
Scalaでの依存性注入について尋ねられたとき、かなり多くの回答が、Scalazからのものか、または単に独自のものをローリングするかのいずれかで、ReaderMonadを使用することを示しています。アプローチの基本を説明する非常に明確な記事がいくつかありますが(たとえば、Runarの講演、Jasonのブログ)、より完全な例を見つけることができず、そのアプローチの利点を他の人よりも理解できていません。従来の「手動」DI(私が書いたガイドを参照)。おそらく私はいくつかの重要な点を見逃しているので、質問です。 例として、次のクラスがあると想像してみましょう。 trait Datastore { def runQuery(query: String): List[String] } trait EmailServer { def sendEmail(to: String, content: String): Unit } class FindUsers(datastore: Datastore) { def inactive(): Unit = () } class UserReminder(findUser: FindUsers, emailServer: EmailServer) { def emailInactive(): Unit = () } class CustomerRelations(userReminder: UserReminder) { def retainUsers(): Unit = …

9
依存性注入のPythonの方法は何ですか?
前書き Javaの場合、依存性注入は純粋なOOPとして機能します。つまり、実装するインターフェイスを提供し、フレームワークコードで、定義されたインターフェイスを実装するクラスのインスタンスを受け入れます。 これでPythonの場合も同じように実行できますが、Pythonの場合、この方法はオーバーヘッドが大きすぎると思います。では、Pythonの方法でどのように実装しますか? 使用事例 これがフレームワークコードだとしましょう: class FrameworkClass(): def __init__(self, ...): ... def do_the_job(self, ...): # some stuff # depending on some external function 基本的なアプローチ 最も素朴な(そしておそらく最良の?)方法は、外部関数をFrameworkClassコンストラクターに提供してから、do_the_jobメソッドから呼び出すことを要求することです。 フレームワークコード: class FrameworkClass(): def __init__(self, func): self.func = func def do_the_job(self, ...): # some stuff self.func(...) クライアントコード: def my_func(): # my implementation framework_instance = FrameworkClass(my_func) …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.