2011-09-13 6 views
0

私はビューの内側から自分のサービスに電話をかけなければならないという要件があります。私が呼び出す必要のあるサービスは私のリポジトリに依存しています。ASP.net MVC - ビュー内のオブジェクトを解決するCastle Windsorの機能を使用する方法

そうではなく、代わりに - IUserService _userService = new UserService(new UserRepository());

Windsorから_userServiceオブジェクトを取得したいのですが、すでにすべての依存関係が解決されています。

どうすればこの問題を解決できますか?


IUserServiceを呼び出す必要があるビューは、共有フォルダ内の_layout.cshtmlです。これに特有のコントローラはありません。だからどこから依存関係を注入すべきですか?

私が必要とする機能は、UserServiceで実装した役割ベースのアクセスを確認することです。私は2つの選択肢があります: 1.私のビュー内でCOntext.User.IsInRoleを使用してください(これはテスト可能なコードではありません)。 2.ビューから(テストでサポートされている)私のUserServiceを呼び出します。 私は2つの悪のうち小さいものを選ぶ必要がありましたので、2番目の選択肢に行ってきました。

いずれの入力も高く評価されます。

+0

IUserServiceを呼び出す必要があるビューは、共有フォルダ内の_layout.cshtmlです。これに特有のコントローラはありません。だからどこから依存関係を注入すべきですか? 私がビュー内で必要とする機能は、UserService経由で実装したロールベースのアクセスを確認することです。私は2つの選択肢があります - 1.私のビュー内でCOntext.User.IsInRoleを使用するか(テスト可能なコードではありません)2.または(テストでサポートされている)ビューから自分のUserServiceを呼び出します。私は2つの悪のうちの小さいものを選ぶ必要があったので、第2の選択肢に行った。 すべての入力を高く評価されます。 – annantDev

答えて

1

入力を求めました。 IMOでは、ビュー内からリポジトリを呼び出すべきではありません。

私は2つのより良い選択肢が考えられます。

オプション1

あなたは、ビューに渡すのViewModelにユーザーの役割を置きます。次に、ViewModelにロールを照会します。

オプション2

あなたAccountControllerのChildActionを呼び出し、部分ビューを返します。このような 何か:あなたのビューで

:あなたのコントローラーで

Html.Action("GetUserRoles", "Account"); 

[ChildActionOnly] 
[Transaction] 
public PartialViewResult GetUserRoles(string userId) 
{ 
    var viewModel = userService.GetRolesForUser(userId); 
    return PartialView(viewModel); 
} 

は今、あなただけのコントローラのコンストラクタを介してIUserServiceを注入することができます。 IMO簡単な繰り返しや同様のものから、ビューにはコードが含まれてはならず、特にデータアクセスコードではありません。これがMVCパターンの全前提です。

関連する問題