Можете ли вы добавить зависимости в конструктор пользовательского WebViewPage, используя контейнер IOC? - PullRequest
6 голосов
/ 05 октября 2011

Я понимаю, что в MVC 3 вы можете создавать собственные веб-страницы.Можете ли вы внедрить зависимости, используя конструктор, через контейнер IOC?

Ответы [ 3 ]

10 голосов
/ 07 октября 2011

В сообщении блога Брэдом Уилсоном приведен пример для внедрения представления. http://bradwilson.typepad.com/blog/2010/07/service-location-pt3-views.html

Заявления других, что представления допускают внедрение конструктора, не совсем корректны.Да IDependencyResolver позволяет создавать представления с аргументами конструктора.Но до тех пор, пока вы не внедрите свой собственный движок, это вам совсем не поможет.Существующие механизмы представления, такие как бритва, потребуют, чтобы у вас был конструктор без параметров.Это означает, что вы можете делать инъекцию свойств только для представлений вместе с ними.

Но, как говорили другие, вам не следует делать инъекцию в любом случае.Ваше представление должно быть тупым и просто отображать модель представления в HTML.Все, что требует зависимости, должно быть сделано в контроллере или сервисе.

8 голосов
/ 07 октября 2011

Невозможно выполнить конструктор внедрение.Но вы можете сделать что-то вроде этого, скажем, с помощью Ninject:

    public abstract class CustomViewBase<TModel> : WebViewPage<TModel> where TModel : class
    {
        [Inject]
        public IFace Face
        {
            get;
            set;
        }
    }

И, предполагая, что вы настроили IDependencyResolver в Global.asax, вы должны правильно инициализировать свойство @Face. Но одно важное предостережение: вы не можете получить доступ к @Face в _Layout.cshtml, потому что (согласно Брэду Уилсону) Layout работает вне MVC, и @Face будет нулевым, когда вы попытаетесь получить к нему доступ на странице макета.

В любом случае я согласен с другими в том, что представление не должно иметь дело с какой-либо сложной логикой.

5 голосов
/ 05 октября 2011

Да, это возможно, но я действительно думаю, что это не очень хорошая идея. Зачем вам нужны «услуги» на уровне просмотра? Помните ключевое правило MVC - представление должно быть немым. Фактически, это должен быть просто какой-то шаблон для преобразования объекта модели представления в HTML, не более того.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...