1

Unity Dependency Injection으로 작업을 시작했습니다. 컨트롤러 및 모델과 함께 사용하는 방법을 알아 냈습니다. 그러나 뷰를 사용하는 방법을 잘 모르겠습니다 ...Unity.Mvc5를 사용하여 MVC보기에 서비스 삽입

내가 원하는 것은 등록 된 서비스를 사용하여보기 내에서 조회 목록을 검색 할 수 있습니다.

이 URL을 보시려면 http://blog.simontimms.com/2015/06/09/getting-lookup-data-into-you-view/에서 MVC6을 사용하여 작업하는 방법을 보여줍니다. 뷰에서 @inject 지시문을 사용합니다. 그러나 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 지시어에 대해 알지 못했습니다. 달콤한 하나님, 그것은 끔찍한 코드로 이어질 것입니다. 마이크로 소프트가 항상 지뢰를 자신의 물건에 추가하는 이유를 절대로 이해하지 못합니다. 쳇. –

+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에 이것을 추가합니다.

관련 문제