Можно ли вводить зависимости в конструктор настраиваемой WebViewPage с помощью контейнера IOC?

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

3 ответов


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

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

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


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

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

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


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