2010-04-20 15 views
8

Si un programa ha deserializado un objeto literalmente (no importa cómo, pero solo diga que se usó BinaryFormatter).Reinyectar dependencias de un objeto recién deserializado

¿Cuál es un buen diseño para volver a inyectar las dependencias de este objeto?

¿Hay un patrón común para esto?

Supongo que tendré que ajustar el método Deserialize() para actuar como una fábrica dentro del contenedor.

Gracias!

Respuesta

10

No debe serializar objetos con dependencias que no pueden ser serializados.

En su lugar, divídalo en dos clases: extraiga las partes serializables en una clase separada.

Después de la deserialización, puede asociar el objeto resultante con una instancia de la clase original (la que tiene dependencias).

+1

"Todos los problemas en la informática se pueden resolver con otro nivel de indirección, excepto por el problema de demasiadas capas de indirección". –

+0

Pienso en mi sugerencia como * eliminar * una capa de indirección. (¡O al menos eliminando la necesidad de uno adicional!);) –

+0

Tengo que admitir que Jeff, esta fue una posible solución que cruzó por mi mente. Lo he implementado ahora y la base de código es mejor :) – nbevans

0

Usaría el atributo OnDeserialized para apuntar a un método que haría la reinyección.

+0

Pero eso seguramente requeriría una dependencia del contenedor en sí, es decir, ¿rompiendo la regla dorada de IoC? – nbevans

+0

No es cierto si está utilizando algo como Microsoft.Practices.ServiceLocation es neutral en el contenedor. –

+0

Envase-neutral, pero aún depende del contenedor. –

0

Unity tiene un concepto de "BuildUp" donde puede solicitar que cumpla con las dependencias de un objeto existente. No sé si autofac (que supongo que está usando de las etiquetas) tiene un equivalente.

+1

La inyección de propiedad es el equivalente de Autofac –

Cuestiones relacionadas