Передача данных / объектов между сборками в WP7

#windows-phone-7

#windows-phone-7

Вопрос:

Проект Windows Phone 7, над которым я работаю, имеет 2 пользовательских интерфейса и основной «движок» функциональности с некоторыми распространенными страницами. Я бы хотел, чтобы мой пользовательский интерфейс передавал объект на одну из этих общих страниц в базовой сборке.

В настоящее время я могу переходить к страницам в основной сборке из сборки пользовательского интерфейса. Однако, насколько я понимаю, каждая сборка имеет собственное изолированное хранилище, это правильно?

Если я могу совместно использовать изолированное хранилище, я могу это использовать, я просто не уверен, как заставить две сборки использовать его вместе.

Какова наилучшая практика?

Я попытался погуглить это: ‘wp7 передает объект между сборками’

Дополнительная информация:
Это будет 1 приложение с двумя сборками. Что-то вроде этого:

CustomerUI (проект)
— MainPage.xaml
— App.xaml

CoreFuncs (project)
— customerData.cs
— EditCustomer.xaml

SalesRepUI (проект)
— MainPage.xaml
— App.xaml

Как CustomerUI, так и SalesRepUI будут использовать страницу EditCustomer и объект customerData. Итак, на главной странице создается экземпляр объекта customerData, после чего пользователь может нажать «Редактировать пользователя», что приведет к переходу на общую страницу EditCustomer.xaml. Мы хотели бы передать уже созданный объект customerData. (Для целей этого обсуждения …)

Комментарии:

1. Извините, извините, я нашел то, что хотел, я слишком много думал. PhoneApplicationService.Current.State["keyName"] = object; это было именно то, чего я хотел. Не уверен, что это лучший способ, но для меня это работает. Просто добавьте туда мой класс настроек или что-то еще и перехватите его на другой стороне в коде page.xaml.

Ответ №1:

Насколько я знаю, существует одно изолированное хранилище для каждого приложения, а не для каждой сборки. Так что вы можете попробовать пропустить через него свои объекты, если хотите.

Ответ №2:

Это зависит от того, являются ли эти два отдельных приложения или две сборки?

Изолированное хранилище изолировано вокруг запущенного приложения. Это означает, что у каждого приложения есть свое собственное хранилище, к которому нельзя получить доступ из другого приложения. Единственными способами обмена данными между двумя приложениями являются:

  1. Веб-сервис / или TCP-сервис в версии 7.5: вы должны загружать данные из одного приложения и загружать их в отдельное приложение.

  2. Пользователь выполнял задачи: Копирование и вставка / Отправка электронного письма

Однако, если это всего лишь одно приложение, вы сможете получить доступ к изолированному хранилищу между сборками, просто прочитав и записав файлы. Единственное, о чем следует помнить, это блокировка файлов, убедитесь, что вы закрываете файлы, прежде чем пытаться читать из них из отдельной библиотеки dll / сборки.

Комментарии:

1. Хм … ладно, это было бы здорово. Однако я использую класс App.xaml.cs для изолированного хранилища, я получаю такие значения return (Application.Current as UIAppName.App).ValueName; . UIAppName будет ссылаться на возражение CoreClasses, но могут ли CoreClasses получать данные приложения из UIAppName?

2. Итак, как насчет этого, у меня есть MainPage.xaml в UiApp, который может считывать значения из App.xaml. Затем пользователь переходит к CommonPage.xaml в сборке CoreFuncs. Когда загружается MainPage.xaml, я хотел бы прочитать настройки в области, где CommonPage.xaml может получить к ним доступ. Я думал о добавлении класса settings в CoreFuncs, что-то вроде CoreFuncs.AppSettings, в который CommonPage мог бы записывать. Я на правильном пути?

3. Если создать свой собственный класс для настроек и сериализовать / десериализовать его в изолированное хранилище. Ссылка на сериализацию: support.microsoft.com/kb/815813 Ссылка на изолированное хранилище: windowsphonegeek.com/tips/… Вы могли бы реплицировать этот класс в каждой сборке… ИЛИ вы могли бы создать библиотеку классов, на которую ссылаются обе сборки

Ответ №3:

Извините, извините, я нашел то, что хотел, я слишком много думал. PhoneApplicationService.Current.State["keyName"] = object; это было именно то, чего я хотел. Не уверен, что это лучший способ, но для меня это работает. Просто добавьте туда мой класс настроек или что-то еще и перехватите его на другой стороне в коде page.xaml.

Ответ №4:

Я бы рекомендовал использовать класс Messenger в MVVM Light toolkit:http://blog.galasoft.ch/archive/2009/09/27/mvvm-light-toolkit-messenger-v2-beta.aspx

Обе ваши сборки могут ссылаться на одну общую сборку; эта сборка может содержать тип, который вы используете для хранения данных, передаваемых через messenger.