私たちは、ASP.NET MVC技術を使って何らかのクラウドCMSを開発しています。途中でいくつかの障害が見つかっています。ユーザーがコントロールパネルを使用して変更できるいくつかのパラメータが、ビューに表示されます。たとえば、FacebookのJS APIを初期化するためのFacebookアプリケーションID。または、ページに表示される追加のテキスト。または背景の画像。今はDIを使用してこのパラメータを転送するのではなく、ビューモデルにViewModelを追加していますが、これはASP.NET MVCのモデル(フォーム検証、バインディングなど)の操作方法を壊しています。MVCビューにサービスを注入する必要がありますか?
It DIを使用してパラメータ、テキスト、画像を提供するサービスを注入すると、私の見解をコントローラ特有のものにあまり依存させることができないと思われ、http://www.asp.net/mvc/tutorials/hands-on-labs/aspnet-mvc-4-dependency-injection#Exercise2というMicrosoftの技術もあります。しかし、DIを使用してビューにサービスを注入することについてのフォーラムには、多くの答えがあります。
質問:ビューにいくつかのサービスを注入する正しい方法は何ですか?あるいは、私はそれをまったくやってはいけません。アプリケーションの設計に何か問題がありますか?
UPDATE:いくつかの実際のコード例データベースから
注入テキストを(今、私たちはサービスを注入するためにモデルを使用している)は、(それがCMSであるとして、彼らは、ユーザーが編集可能である必要はあり):
データベース(実際、それは局在化)から<div class="steps">@Html.Raw(Model.Texts["Main", "Step2"]</div>
注入翻訳:
<div class="gonfalon">@Model.Translations["Title_Winners"]</div>
データベース、COUから(パラメータを注入ldはリクエストに依存する。たとえば、サイトが別のドメインを持っている場合は、Facebookアプリケーションは、ドメインごと)する必要があります:
Facebook.Initialize(Model.Parameters["FbApplicationId"], Model.Parameters["FbApplicationSecret"]);
現在のアプローチの問題は、このコードは、コンテストのメカニックから取ったということです。カスタムテキスト、翻訳、またはFacebookアプリケーションIDを処理することは、コンテストのビジネス範囲からはっきりとはずれています。物事の多くは、実際に
UPDATE 2(翻訳とカスタムテキストのように)見るに属しても、それは実際のないモデルのモデル事業ドメインが、取引としてモデル遺跡:以下のように答えからスニペットを変更しましたより一般的なビット:
ベストソリューションのように見えます。モデルから取り除いているものの実際のコード例をいくつか追加しましたが、取り除きたいものです。 –