Pasar datos / objetos entre ensamblajes en WP7

El proyecto de Windows Phone 7 en el que estoy trabajando tiene 2 interfaces de usuario y un 'motor' central de funcionalidad con algunas páginas que son comunes. Me gustaría que mi interfaz de usuario pasara un objeto a una de estas páginas comunes en el ensamblaje principal.

Actualmente puedo navegar a páginas en el ensamblaje principal desde el ensamblaje de la interfaz de usuario. Sin embargo, tengo entendido que cada ensamblaje tiene su propio almacenamiento aislado, ¿es correcto?

Si puedo compartir el almacenamiento aislado, puedo usarlo, pero no estoy seguro de cómo hacer que los dos ensamblajes lo usen juntos.

¿Cuál es la mejor práctica?

Intenté buscar en Google esto: 'objeto de paso wp7 entre ensamblajes'

Más información:
Esta sería una aplicación con dos ensamblajes. Algo como esto:

CustomerUI (proyecto)
- MainPage.xaml
- App.xaml

CoreFuncs (proyecto)
- CustomerData.cs
- EditCustomer.xaml

SalesRepUI (proyecto)
- MainPage.xaml
- App.xaml

Tanto CustomerUI como SalesRepUI usarían la página EditCustomer y el objeto customerData. Entonces, desde MainPage se crea una instancia de un objeto CustomerData, luego un usuario puede hacer clic en 'Editar usuario' que navegará a la página común EditCustomer.xaml. Querríamos pasar el objeto CustomerData ya instanciado. (Para el propósito de esta discusión ...)

preguntado el 08 de noviembre de 11 a las 16:11

Lo siento, lo siento, encontré lo que quería, estaba pensando demasiado. PhoneApplicationService.Current.State["keyName"] = object; era exactamente lo que quería. No estoy seguro de si es la mejor manera, pero para mí funciona. Simplemente arroje mi clase de configuración o lo que sea allí, y cójalo en el otro lado en el código page.xaml. -

4 Respuestas

Como sé, hay un almacenamiento aislado por aplicación, no por ensamblaje. Así que puedes intentar pasar tus objetos a través de él si quieres.

respondido 08 nov., 11:20

¿Depende son estas dos aplicaciones separadas o dos ensamblajes?

El almacenamiento aislado está aislado alrededor de la aplicación en ejecución. Esto significa que cada aplicación tiene su propio almacenamiento al que no se puede acceder desde una aplicación diferente. Las únicas formas de compartir datos entre dos aplicaciones son:

  1. Un WebService / o un servicio TCP en 7.5: cargaría los datos desde una aplicación y descargaría los datos en una aplicación separada.

  2. Tareas realizadas por el usuario: copiar y pegar / enviar un correo electrónico

Sin embargo, si esta es solo una aplicación, podrá acceder al almacenamiento aislado entre los ensamblajes simplemente leyendo y escribiendo en los archivos. Lo único que debe tener en cuenta es el bloqueo de archivos, asegúrese de cerrar los archivos antes de intentar leerlos desde un dll / ensamblado separado.

respondido 08 nov., 11:20

Hmm ... está bien, eso sería genial. Sin embargo, estoy usando la clase App.xaml.cs para almacenamiento aislado, obtengo valores como este return (Application.Current as UIAppName.App).ValueName;. UIAppName hará referencia a la objeción de CoreClasses, pero ¿puede CoreClasses obtener los datos de la aplicación desde UIAppName? - M Kenyon II

Entonces, ¿qué tal esto? Tengo MainPage.xaml en UIApp que puede leer valores de App.xaml. Luego, el usuario navega a CommonPage.xaml en el ensamblado CoreFuncs. Cuando se carga MainPage.xaml, me gustaría leer la configuración en un área donde CommonPage.xaml pueda acceder a ellos. Estaba pensando en agregar una clase de configuración a CoreFuncs, algo como CoreFuncs.appSettings, en el que CommonPage podría escribir. ¿Estoy en el camino correcto? - M Kenyon II

Si crea su propia clase para la configuración y serialícela / deserialícela en un almacenamiento aislado. Enlace sobre serialización: support.microsoft.com/kb/815813 Enlace en almacenamiento aislado: windowsphonegeek.com/tips/… Podría tener esta clase replicada en cada ensamblado ... O podría crear una biblioteca de clases a la que hagan referencia ambos ensamblados - JonAlb

Lo siento, lo siento, encontré lo que quería, estaba pensando demasiado. PhoneApplicationService.Current.State["keyName"] = object; era exactamente lo que quería. No estoy seguro de si es la mejor manera, pero para mí funciona. Simplemente arroje mi clase de configuración o lo que sea allí, y cójalo en el otro lado en el código page.xaml.

respondido 29 nov., 11:21

Recomendaría usar la clase Messenger en el kit de herramientas MVVM Light: http://blog.galasoft.ch/archive/2009/09/27/mvvm-light-toolkit-messenger-v2-beta.aspx

Ambos ensamblajes pueden hacer referencia a un solo ensamblado compartido; ese ensamblado puede contener un tipo que se utiliza para almacenar los datos que se transmiten a través del mensajero.

respondido 08 nov., 11:21

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.