2010-11-27 56 views
7

He estado buscando aprender inyecciones de dependencia (creo que ahora he entendido lo básico) y estoy buscando implementarlo en una aplicación webform.Qué dependencia Injection Framework con WebForms

Mi pregunta es, ¿qué marco de inyección de dependencia debo usar para un proyecto de formularios web, o se trata de lo que funciona mejor para usted?

Actualmente he mirado Spring.Net, Ninject, Unity y StructureMap, tiendo a no tener preferencia en la configuración, ya sea XML o interfaces fluidas. Sin embargo, ¿la configuración XML se está volviendo menos favorable?

La mayor parte de la información que encuentro se refiere a la inyección de dependencia en un entorno MVC. Y también he leído que algunos marcos como Structure Map only work with webforms using version 2.0 or earlier. Por lo tanto, el tipo de cosas que debo considerar son si los formularios web serán de soporte continuo y la facilidad de configuración para alguien relativamente nuevo en el patrón.

Gracias de antemano.

Respuesta

10

Realmente no importa qué marco elijas, el único truco es permitir que clases como las clases System.Web.UI.Page se inyecten con sus dependencias. Cuando miras ASP.NET MVC, ves que lo diseñaron especialmente para jugar bien con los frameworks de inyección de dependencias. ASP.NET WebForms claramente no está diseñado para esto. Algunos frameworks tienen soporte para WebForms listos para usar, pero para todos los demás, no es tan difícil hacer esto.

En una aplicación WebForms, la "cosa" que crea páginas para usted es PageHandlerFactory. Lo que debe hacer es sustituir la clase de PageHandlerFactory base, aplicar algunas prácticas de inyección de este tipo, y registrar este nuevo tipo en el web.config:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <httpHandlers> 
     <add verb="*" path="*.aspx" 
     type="MyPageHandlerFactory, MyAsm"/> 
    </httpHandlers> 
    </system.web> 
    <system.webServer> 
    <handlers> 
     <add name="CSLPageHandler" verb="*" path="*.aspx" 
     type="MyPageHandlerFactory, MyAsm"/> 
    </handlers> 
    </system.webServer> 
</configuration> 

He escrito an article acerca de cómo crear un PageHandlerFactory a trabajar con el Common Service Locator, pero puede elegir su marco de trabajo de IoC favorito y cambiar solo una línea de código para que funcione.

Buena suerte.

+0

Gracias por su visión. Decidió ir con spring.net debido a sus características adicionales. – gdp

+0

Spring.net es mi contenedor menos favorito. ¿Qué características necesita específicamente que ofrece la primavera? – jonnii

+0

Específicamente el enlace de datos bidireccional y el soporte de nhibernate. – gdp