1

Я только начал работать с Unity Dependency Injection. Я выяснил, как использовать его с контроллерами и с моделями. Однако я не уверен, как использовать его с Views ...Inject Service в MVC View с Unity.Mvc5

Что я хочу сделать, это возможность получать списки поиска из View с помощью зарегистрированного Сервиса.

Просмотрев этот URL-адрес http://blog.simontimms.com/2015/06/09/getting-lookup-data-into-you-view/, он показывает, как это сделать с MVC6. Он использует директиву @inject в представлении. Однако я застрял в MVC5, который, похоже, не имеет этой директивы.

Есть ли альтернатива MVC5 для @inject?

Я регистрирующий свои услуги и хранилища, как так ...

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. Сладкий Бог, это приведет к ужасному коду. Никогда не понимал, почему Microsoft всегда добавляет такие наземные мины своим вещам. 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 

Я затем добавить это в Views/Web.config, как так ...

<pages pageBaseType="MyNamespace.MyWebViewPage"/> 

Все свойства услуг и методов автоматически доступны для всех моих взглядов.

Смежные вопросы