Можно ли вводить зависимости в конструктор настраиваемой 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, не более того.