11

¿Qué es un contenedor de IoC?IoC, AOP y más

¿Qué es un marco IoC/DI?

¿Por qué necesitamos un marco para IoC/DI?

¿Existe alguna relación entre IoC/DI y AOP?

¿Qué es Spring.net/ninject con respecto a IoC y AOP?

+0

también verifique esto: http://stackoverflow.com/questions/15675331/difference-between-spring-ioc-and-spring-aop – NoNaMe

Respuesta

4

JMSA,

James Kovacs escribió un artículo fantástico que cubre muchas de sus preguntas que recomendaría la lectura Here

Spring.Net, Ninject, Unidad, el castillo de Windsor, Autofac son todos los contenedores que son COI configurables de diferentes maneras, muchos de ellos también admiten AOP.

Los marcos para IOC/DI son útiles porque proporcionan mecanismos estándar, por ejemplo, si está contratando un nuevo desarrollador es mucho más fácil decirlo, usamos este marco y les pasamos los enlaces a los tutoriales/guía de ayuda. Al mismo tiempo, estos marcos son probados y probados por una gran comunidad/empresas.

Avíseme si alguna de sus preguntas permanece sin respuesta después de leer el artículo y las respuestas anteriores, y haré todo lo posible para proporcionar más ayuda.

+0

Gracias Peter! ¡Realmente ayudó! –

+0

¿Existe alguna relación entre IoC/DI y AOP? –

+0

Hasta cierto punto, existe una relación allí. Si nos fijamos en AOP, en su mayoría se aplica para cosas como Logging, y estilo de permisos de seguridad de cuestiones de corte transversal. En el caso del registro, muchos desarrolladores lo usarían junto con DI/IOC para poder cambiar proveedores de registro (digamos swap log4net al registro de la biblioteca empresarial). Pero la verdadera respuesta es que no necesita DI ni IoC para implementar AOP y para implementar DI o IoC no necesita usar AOP. – Peter

2

Martin Fowler tiene un buen artículo here sobre el significado de Inversion of Control and Dependency Injection.

Uso de Spring.NET AOP se describe en detalle here. Estoy más familiarizado con la versión de Spring basada en Java, por lo que no puedo decir con certeza que Spring.NET actualmente solo admita AOP basado en proxy.

Es decir, una clase a ser aconsejada debe implementar una interfaz. Spring creará un proxy dinámico que implementa esta interfaz y delega a la instancia de destino original.

A pesar de que sí declara:

En una versión futura vamos a implementar servidores proxy utilizando la herencia, que le permitirá a clases de proxy sin interfases, así y eliminará algunos de los temas de referencia en bruto restantes que no se pueden resuelto utilizando proxies basados ​​en composición.

3

Desde el punto de vista de la semántica ...

sí inyección de dependencia implica una dependencia , es decir, algo que es requerido para la construcción/uso ("preocupaciones centrales" de la aplicación). Por ejemplo, un automóvil no es un automóvil sin motor.

Los aspectos se describen como transversales a las preocupaciones principales de la aplicación. Eso significa que es independiente y no crucial para las preocupaciones principales (se podría pensar que son "agradables para los que tienen"). Dado que la aplicación se puede ejecutar sin aspectos, ¿son realmente dependencias? Por ejemplo, un automóvil sigue siendo un automóvil incluso sin un inmovilizador.

(Por supuesto, esto es desde un punto de vista teórico.En el mundo real, cuestiones como la seguridad son a menudo tan cruciales para la existencia de un producto comerciable como el núcleo mismo.)

De modo que mientras en la práctica DI se puede usar para implementar aspectos, no llamaría a ese proceso verdadero DI . Esto proviene de alguien que usa la inyección de constructor exclusivamente.