En MVC 3, entiendo que puede crear páginas WebView personalizadas. ¿Puede inyectar dependencias, usando la inyección de constructor, a través de un contenedor IOC?¿Se pueden inyectar dependencias en un constructor de una WebViewPage personalizada utilizando un contenedor IOC?
Respuesta
Hay un expample de vista de la inyección en un blog por Brad Wilson http://bradwilson.typepad.com/blog/2010/07/service-location-pt3-views.html
Las declaraciones de los otros que permiten vistas inyección de constructor no es del todo correcta. Sí IDependencyResolver
permite crear vistas que tienen argumentos de constructor. Pero a menos que esté implementando su propio motor de vista esto no lo ayudará en absoluto. Los motores de visualización existentes como la afeitadora requerirán que tenga un constructor sin parámetros. Esto significa que solo puede hacer inyecciones de propiedad en vistas con ellos.
Pero como los demás dijeron que no debería ver la inyección de todos modos. Su vista debe ser tonta y simplemente renderizar el modelo de vista a HTML. Todo lo que requiera una dependencia se debe hacer en el controlador o un servicio.
Sí, es posible, pero realmente creo que no es una buena idea. ¿Por qué necesitarías algunos "servicios" en el nivel de vista? Recuerde la guía clave MVC - una vista debe ser tonta. De hecho, debería ser solo un tipo de plantilla para la transformación del objeto de modelo de vista a HTML, nada más.
Buen punto. Debería estar inyectando servicios en el "Controlador", no en la vista. – Steven
i18n traducciones dentro de la vista. Ver contiene las claves y simplemente tira de la traducción correcta. No hay razón por la que eso no pueda estar en la vista. – BradLaney
¿Qué tal un servicio de localización o tipo de configuración que solo contiene texto? Técnicamente aún son tontos –
No es posible realizar constructor inyección. Pero se puede hacer algo como esto con, por ejemplo, Ninject:
public abstract class CustomViewBase<TModel> : WebViewPage<TModel> where TModel : class { [Inject] public IFace Face { get; set; } }
y suponiendo que haya configurado IDependencyResolver en Global.asax usted debe tener correctamente la propiedad @Face inicializado. Pero una advertencia importante: no puede acceder a @Face en _Layout.cshtml, porque (según Brad Wilson) Layout funciona fuera de MVC, y @Face será nulo cuando intente acceder a él en la página de diseño.
En cualquier caso, estoy de acuerdo con los demás en que la vista no debería tener que lidiar con ninguna lógica compleja.
¡ESTO ES INCREÍBLE! No me di cuenta de que podías hacer eso con Ninject. –
No tiene que ser ninject tampoco. Autofac y otros harán lo mismo, sin necesidad del decorador. –
Funcionó bien en páginas heredadas. Pero, ¿cuál es la solución para acceder a los mismos métodos de clase inyectados dentro del diseño (página maestra) en MVC? –
- 1. dependencias Inyectar AutoMapper utilizando Ninject
- 2. Cómo inyectar dependencias en global.asax.cs
- 3. ¿Los parámetros de constructor primitivo son una mala idea cuando se utiliza un contenedor de IoC?
- 4. Constructor por defecto versus contenedor IOC
- 5. Cuándo usar un contenedor de IOC?
- 6. ¿Es una mala práctica o un olor codificado utilizar un contenedor IoC al instalar dependencias?
- 7. ¿Puede Windsor cooperar con otro contenedor IoC?
- 8. Contenedor IoC Project-Embedded
- 9. Especifique el constructor para el contenedor Unity IoC para usar
- 10. No se puede inyectar contenedor RESOURCE_LOCAL lograron EntityManager utilizando @PersistenceContext
- 11. cómo inyectar la propiedad de dependencia utilizando Ioc Unidad
- 12. ¿Qué forma preferida de cablear dependencias usando el contenedor IoC?
- 13. IoC, ¿dónde colocas el contenedor?
- 14. Tratando con dependencias circulares en IOC
- 15. con Unity para inyectar dependencias en una costumbre ActionFilter
- 16. ¿Puede Autofac inyectar dependencias en archivos de vista de diseño?
- 17. No se pueden inyectar dependencias en Asp.net MVC 4 Web API Controller usando Windsor Container
- 18. ¿Son demasiadas dependencias para inyectar en un objeto a través del constructor?
- 19. ¿Cómo se manejan las dependencias 'profundas' con IoC y DI?
- 20. Cómo pasar argumentos a un constructor en un IOC-framework
- 21. IoC: cableando dependencias en controladores de eventos
- 22. ¿Debo encapsular mi contenedor IoC?
- 23. Cómo evitar el acoplamiento con un contenedor de IoC
- 24. ¿Qué debería construirse a través de un contenedor de IOC?
- 25. ¿Se pueden registrar temporalmente los componentes en un contenedor Autofac?
- 26. Combinación del contenedor MEF y IoC
- 27. ¿Un contenedor de IoC reemplaza el uso de las fábricas
- 28. Usando Guice para inyectar dependencias en el constructor de una actividad de Android
- 29. Inyectar una función en un archivo Java .class utilizando Haskell
- 30. inyectar un MembershipProvider en ASP.Net MVC AccountController
¿Qué sucede si tiene una autorización personalizada que desea poder usar como propiedad de la vista? (para especificar ciertas partes que no se deben procesar en una afeitadora sin los permisos requeridos) –