2009-06-17 18 views
1

IoCでビューの依存関係を解決する良い方法はありますか?キャッスルウィンザーに基づく私自身のIoC決議があります。私はIResourceServiceを持っています。私はいくつかの文字列を解決するために私の意見にアクセスしたいと思います。IoCとASP.NET MVCビュー

+0

一日の終わりには、あなたがあなたのサービスを呼び出す想定しない方法ビュー自体を見る。その点であなたの目標は何ですか?サンプルビューはどのように見えますか?実際にビューに自動依存関係を注入することなく、目標を達成するための別の方法を見つけることができます。 – NerdFury

答えて

1

私はその中に私の依存関係を解決した後、拡張子の方法のために行くだろう:私の見解では

public static class LocalizationExtentions 
{ 
    public static string Localize(this HtmlHelper html, string resource) 
    { 
    var localize = IoC.Resolve<ILocalize>(); 
    return localize.For(resource); 
    } 
} 

を:

<h1><%= Html.Localize("MainTitle") %></h1> 
0

コントローラで解決してから、ViewModelに入れて解決されたインスタンスにアクセスできますか?

+0

いいえ、それは多くの冗長コードを追加します。 IResourceServiceを使用してローカライズされた文字列をロードしたいだけです。 –

+0

AutoMapperを使用して、依存関係を渡すためのカスタムビューモデルを作成してみてください。 AutoMapperはその冗長コードをたくさん削除します。 –

0

私はWinsorを使用していませんが、コードビハインドのビューを使用する場合はセッター注入が可能です。 なぜビューに対する依存関係を解決したいのですか?それは奇妙なことのように聞こえる。

0

ラッパーを使用できますか?そのラッパーの中にウィンザーにサービスが解決されるかどうか直接問い合わせてください。あなたの見解から、解決したサービスにすべてを渡すResourceHelperクラスを使用してください。あなたのビューのHtmlHelperクラスのように、ResourceHelperクラスを使うことができます。

+0

私はすでにこれを持っています。 –

0

ソースをダウンロードして、小さな変更を加えて使用しますか?ビルドマネージャがコンパイルされたページオブジェクトを作成した後、プロパティインジェクションを行うことができるように、Webフォームビューエンジンの小さな変更によってそれを行うことができます。

それ以外の場合は、ベースコントローラを作成し、アクション実行メソッドをオーバーライドしてビューデータに注入しない限り、醜い状態になります。


編集

http://aspnet.codeplex.com/sourcecontrol/changeset/view/23011?projectName=aspnet#266535

右あなたがプロパティインジェクションを行うには、あなたのサービスロケータを求めることができるviewInstanceにヌル確認後、ページのインスタンスを作成するファイルハンドルです。

関連する問題