2017-02-03 17 views
1

私は、単純なAsp.net MVCヘルパーメソッドをApp_Codeに持っています。Simple InjectorをAsp.Net MVCヘルパーメソッドで使用する方法

@helper ApprovedStatus(TimeWorkedEntry entry) 
{ 
    if (!entry.Authorised) 
    { 
    var approvers = <<get list of approvers from service here >> 

    <a tabindex="0" 
     role="button" 
     class="exclamation" 
     data-html="true" 
     data-toggle="popover" 
     data-trigger="focus" 
     title="<b>Not yet approved</b>" 
     data-content="@approvers"> 
     ! 
    </a> 
} 
} 

私のサービスは、通常、Simple Injectorによってアプリケーション内のコントローラに注入されます。

私が練習できないのは、ヘルパーメソッドに注入されたサービスのインスタンスを取得する方法です。何が足りないのですか?

+0

あなたはしないでください。コントローラ内のビューモデルに値を追加することによって、ビューに値を渡す必要があります。 – Luke

答えて

1

あなたは何もありません。ビューはダムでなければならず、特にロジックを持たないか、サービスを呼び出す必要がありません。それはコントローラーになければならないものです。

したがって、コントローラでは、承認者のリストをビューモデルを通じてビューに渡す必要があります。ビューはこの情報をヘルパーメソッドに渡すことができます。

これは、コードをクリーンでシンプルでテスト可能な状態に保ちます。

+1

Doh!もちろん、なぜ私はそれをそこに注入する必要があると思ったのか分からず、私はそれを忘れてしまったと思う。ありがとうございます – Lobsterpants

+0

ASP.NETコアには@injectディレクティブがありますが、それはちょうど良い汚れです! (ビューのローカライゼーションを除いて) – Luke

+0

@ルーク:ビューのローカライズを行うときに、 'inject'ディレクティブが* even * dirtyであると言う限り、 – Steven

関連する問題