依存関係出液を注入することによりNinject,MVC3のサービスロケータのパターン
質問
これbuggingから一貫して読み込み答えに別のstackoverflow問題の正確な一eludes私)は、ユーザーが記のようなもの"ま呼び出しのサービスロケータでやっているので間違っています。"
また誰かに高い評価を受けています(百何千もういい"と思われているようです。"この人がどのように話す。っておDIもプロジェクト以来ったきっかけとなったのは学習できるかなどに関するユニット試験はどこですか?でも私はかなり快適か 考え かかっています。
しかし、多くの場所を利用サービスロケータを解決する依存関係に私のプロジェクト.一度に盛り例から私のModelBinderになります。
例の検討ください。
public class FileModelBinder : IModelBinder {
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext) {
ValueProviderResult value = bindingContext.ValueProvider.GetValue("id");
IDataContext db = Services.Current.GetService<IDataContext>();
return db.Files.SingleOrDefault(i => i.Id == id.AttemptedValue);
}
}
ない本物の実装だけで、迅速例
以降、ModelBinder実行に必要である新しいインスタンスの場合、バインダー 第 求めるのは無理な利用依存性注射のコンストラクタでこの特定の実装です。
この方法で多くの私。また例えば、ファイル,バーチャルホス終了処理を行う方法でもキャッシュオブジェクトの満了日の私です。しかったバンチのデータベース電話どこですか?でも私が使っているサービスロケータに必要な依存性がある。
もう一つの問題はあったか、最近ではその掲載に関する質問についてはこちらまで)のすべての私のコントローラに必要なインスタンスのIDataContext使ったデータが 一つ アクションメソッドに必要な異なるインスタンスのIDataContext.幸運にもNinjectは救済との名の依存性がある。しかし、このような感じるkludge、ごせます。
と思った私は、少なくとも、理解の概念の分離問合理的である根本的に間違っているかを理解してい依存関係を注入-サービスロケータのパターンとどうなるかはわからないことです。
の現在を理解し、この間違ったとしても、少なくともMVCのControllerFactoryを見るためのコンストラクタコントローラと通話サービスロケータ自体に必要な依存関係およびその後の経過しています。しかし、内容を理解することができないというすべてのクラスは、何を持っていない工場を作成します。ですから私は一部のサービスロケータのパターンが可---が---
- きではないでしょうか?
- どのようなパターンはまさにう考え方を使用しているサービスロケータのパターン?
- 私ModelBinder実施が悪いのでしょうか。その場合、いつから学ぶこを直せばいいの?
- 別の質問に沿ってラインのユーザー マークSeemann お勧めの抽象的な工場-どのようなことに関連?
いのではないでしょうかも-できないと思っているその他の問題に私の理解が追加情報がぞよろしくお願い申し上げます。
理解していることができないの答えがすべきことがございましたかの落としては、か実行しながら仕事の方に期待するとのユニット試験はどこですか?
んなコードを修正しい実装を探している知見についての説明も不良です。
いstackoverflow.com たとする機能を保存案。ことを期待したい誰の答えがこの質問を取得します適切な金額で定評の"その問いに答えることしてしようとしています。げています。
解決
以下を考えます:
public class MyClass
{
IMyInterface _myInterface;
IMyOtherInterface _myOtherInterface;
public MyClass(IMyInterface myInterface, IMyOtherInterface myOtherInterface)
{
// Foo
_myInterface = myInterface;
_myOtherInterface = myOtherInterface;
}
}
このデザインすることができるようにな表現の依存関係の要件は、私のタイプです。タイプなの責任は疑問に知りたいか手動でインスタンスを生成するの依存関係は、付与されるというのが通説である(注)によるも解決の仕組みは[通常は、IoCのコンテナ].は:
public class MyClass
{
IMyInterface _myInterface;
IMyOtherInterface _myOtherInterface;
public MyClass()
{
// Bar
_myInterface = ServiceLocator.Resolve<IMyInterface>();
_myOtherInterface = ServiceLocator.Resolve<IMyOtherInterface>();
}
}
弊社のクラスに依存する創造の特定インスタンスが代表団によるサービスロケータ.その意味で、一つのサービスされることは 抗-パターン かんな露出の依存関係が可能に問題を引っ掛けたり、強く引っ張ったを通じて集めにバブルのアップを行います。(よく読する こちらの).い複雑さを隠.
の間の選択の変化により契約内容の変更を行うビのサービスの提供を目的とした.通常の場合を構築アプリケーションを最初から、お選びDIます。で保守性の向上を推進してモジュール化し、試験種類かります。ものの、ASP.NET MVC3例として、手軽に実現できますSLとして焼きのデザイン。
いようなので、複合デザインを使用できるIoC/ジSLのように 共通サービスロケータ.お部品をできる有線通ージが露出を通して目立つ存在です。あなたのスロー組成物の構成のものを使っておけば間違いないように管理枠組みの拡張性(そのポジも可能ですので、有線その他のIoCの容器またはサービスロケータ).この大規模なデザインの選択が、一般的には私のお薦めするためにIoC/ジが可能です。
特定のデザインかったところにセブンイレブンがあ間違っています。このインスタンス、コードではありませんの責任者のインスタンスモデルのバインダーは、これまでの枠組みを使って管理する が ご利用のサービスロケータでも簡単にアクセスIoCます。 その行動の呼び出し解決するIoCのコンテナ...いなと考えて一つのサービス?
と抽象的なパターン工場の工場では専門を特定です。ん登録の種類決議は、基本的に登録要旨工場、ロイヤル-アカデミーのスタイルはそのままでトータルでわかります。サービスロケータで 検索サービス 戻そう場合がございます。類似から条約の視点が非常に異動が変わってきました。