1

私はUnity Dependency Injectionで作業を始めました。私はコントローラとモデル、そしてモデルとの使用方法を理解しました。しかし、私はビューでそれを使用する方法がわかりません...Unity.Mvc5でMVCビューにサービスを注入

私がしたいことは、登録されたサービスを使用してビュー内から検索リストを取得することができるでしょう。

このURLを参照すると、http://blog.simontimms.com/2015/06/09/getting-lookup-data-into-you-view/はMVC6での操作方法を示しています。これは、ビューの@injectディレクティブを使用します。しかし、私はMVC5に悩まされています。このMVC5はこの指令を持っていないようです。

@injectの代わりにMVC5がありますか?

私は...私はこのように私のコントローラでサービスにアクセスするので...

Public Shared Sub RegisterComponents() 
    Dim container = New UnityContainer() 

    container.RegisterType(Of IMyService, MyService)() 
    container.RegisterType(Of IRepository(Of MyModel), MyRepository)() 

    DependencyResolver.SetResolver(New UnityDependencyResolver(container)) 
End Sub 

よう

<Dependency> 
Public Property MyModelService() As IMyService 

を私のサービスとリポジトリを登録してる私が今知っておく必要があるすべてがありますどのように私のかみそりのビューにサービスを注入する。

+5

間違っている可能性がありますが、私はそれを行う方法がないと思います。しかし、関係なく、必要はありません。ビューにはできるだけ小さなコードが必要です。ビュー内のいくつかのサービスとやりとりするような作業を行うのは、MVCパターンの違反です。代わりに、あなたのコントローラでそれを処理し、関連するデータをビューに渡します。 –

+4

また、以前は@injectディレクティブについて認識していませんでした。甘い神、それはひどいコードにつながるだろう。マイクロソフトがいつもそのような地雷を自分のものに追加する理由を理解していない。 Sheesh。 –

+0

私の推論は、リストにデータを入れるためのコードでコントローラを乱雑にしないようにすることでした。これは、ビューにのみ関連しています。私がリンクしている記事はそれをうまく説明しています。私はあなたのポイントを参照してください。 – user1751825

答えて

0

私は比較的純粋な解決策を見つけました。

WebViewPage(汎用、非汎用)から継承する独自のビュー基本クラスを作成し、そこに注入されたサービスプロパティを配置します。

Namespace MyNamespace 
    Public MustInherit Class MyWebViewPage 
     Inherits MyWebViewPage(Of Object) 

    End Class 

    Public MustInherit Class MyWebViewPage(Of T) 
     Inherits System.Web.Mvc.WebViewPage(Of T) 

     <Dependency> 
     Public Property MyModelService() As MyNamespace.IMyModelService 

    End Class 

End Namespace 

私はそのように...

<pages pageBaseType="MyNamespace.MyWebViewPage"/> 

のようなサービスのプロパティとメソッドのすべては、すべての私の見解を自動的に利用可能な、/ Web.configファイルビューにこれを追加します。

関連する問題