Общая библиотека для MonoDroid и MonoTouch

Таким образом, моя компания происходит из полностью окружающая среда C#.Net, так естественно мы смотрим на Моно для мобильного развития. У нас есть очень обширная библиотека платформы окон, которая я смог держать большую часть в строевой стойке из него как Библиотека классов Android. Идея, являющаяся, что эта Библиотека классов Android будет нашей библиотекой мобильной платформы, которая может быть снова использована в будущем для MonoTouch (Не проверили, но прочитали, что проект MonoTouch может сослаться на Библиотеки классов Android пока, нет никакого Android определенный код). В библиотеке, хотя, есть много регистрирующихся заявлений, которые для окружающей среды окон только заканчивают тем, что были заявлениями следа (обернутый в таможенный класс помощника). Мы хотим сохранить регистрирующиеся заявления и на основе текущей окружающей среды (iOS или Android), просто перевести тех на родную регистрацию.

Я планировал использовать частичные объявления для входа в систему библиотеки мобильной платформы и иметь Android и iOS, определенные библиотеки содержат внедрения для тех частичных методов регистрации. Но это развалилось, когда я понял, что partials не работают между собраниями.

Таким образом, теперь я не уверен, как пойти об этом. Единственная вещь я могу думать, имея две отдельных iOS и библиотеки платформы Android и связывая те же самые файлы. (У Xamarin мог бы быть регистрирующийся класс, который делает это, но мы все еще должны придумать образец для любых других будущих абстракций),

Любой совет ценится. Мы находимся все еще в экспериментальном/стадии планирования, таким образом, есть шанс, мы могли бы пропускать что-то, пожалуйста, сообщите нам, если это так.

Спасибо.

Edit
Lets say I have the following simple static class.

public static class TraceHelper
{
    public static void WriteLine(string message)
    {
       //Validation and preprocessing
        Trace.WriteLine(message);
    }
}

И у меня есть сотни требований к этому методу в библиотеке мобильной платформы. Теперь позволяет, говорят, что я ссылаюсь на эту библиотеку в своем заявлении Android, есть ли любой способ отвергнуть внедрение TraceHelper. WriteLine (), не изменяя саму библиотеку?

Update
We ended up creating Android and iOS libraries that implemented the missing .NET functionality. Just wrap the native equivalent functionality, in the same .NET namespace and class. EX:

using Android.Util;

namespace System.Diagnostics
{
    public static class Trace
    {
        #region Non-Public Data Members

        private const string Tag = "Trace";

        #endregion

        public static void WriteLine(string message)
        {
            Log.WriteLine(LogPriority.Verbose, Tag, message);
        }
    }
}
5
nl ja de
Крис - 100% соглашаются с вашими комментариями - необходимо написать его как ответ.
добавлено автор Stuart, источник
Не уверенный, если я могу дать конкретный совет начиная с вас don' t хотят изменить ваши заявления регистрации. В моей компании, we' разделение ре кодирует между Windows/Silverlight/Android/Unity3D также, но we' ve резюмировал наше внедрение регистрации с интерфейсом многократного использования. Как часть прикладной самонастройки, мы прилагаем определенного для платформы лесоруба негласно. Таким образом весь наш код, который получает доступ к лесорубу, поражает многократного использования ILog интерфейс через статическую фабрику, и не знайте об используемых специфических особенностях платформы. (также помогает приложить различных лесорубов в той же самой платформе, как желаемый),
добавлено автор Chris Sinclair, источник
(продолжение следует). Конечно, это, вероятно, означало бы you' d должны изменить способ, которым вы регистрируетесь от своей бизнес-логики. Возможно, необходимо отправить пример кода того, как business/UI слой в настоящее время регистрируется и до какой степени (если таковые имеются) you' ре, готовое изменить это.
добавлено автор Chris Sinclair, источник

2 ответы

В mvvmcross я занялся этим использованием интерфейсы.

Я объявил общий интерфейс IMvxTrace, тогда я 've добавил внедрение единичного предмета его как:

https://github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious. MvvmCross/Platform/Diagnostics/MvxTrace.cs

Этот единичный предмет использует основное _realTrace внедрение.

На Droid _realTrace:

https://github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious. MvvmCross/Android/Platform/MvxDebugTrace.cs

И на прикосновении, _realTrace:

https://github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious. MvvmCross/Touch/Platform/MvxDebugTrace.cs

Так же есть пользовательские реализации на wpf, win8 и wp

Я сделал это оба файла использования, связывающиеся (во владельце), но позже использующие смесь PCLs и платформы определенные библиотеки. Мой личных предпочтение для PCLs, поскольку мне нравится использовать инструменты рефакторинга - и они работают намного лучше с PCLs, чем с кодом #if. Кроме того, поскольку я вырастил свой код с 1 до 6 платформ, которые я счел 6 наборов #if заявлений слишком сложными, чтобы поддержать.

Обратите внимание, что код выше также использует Внедрение зависимости и метод МОК. Я считаю это действительно полезным для кросс-платформенного кодового разделения. Есть несколько портативных библиотек МОК, доступных включая tinyioc, xplatutils, opennetcf, и простой МОК mvvmcross.

2
добавлено

Самым легким способом зафиксировать это является к установке проект iOS, где можно в основном просто сделать это:

public static class TraceHelper
{
    public static void WriteLine(string message)
    {
#if MONOTOUCH
        Console.WriteLine(message);//or something else
#else
        Trace.WriteLine(message);
#endif
    }
}

Вы создали бы проект библиотеки классов MonoTouch и "ссылку - во" всех файлах из вашего оригинала, Моно для проекта Android. Вы могли тогда установка MONOTOUCH флаг компилятора, чтобы иметь определенную iOS или код Android в случае необходимости.

Мы проявляем этот подход все время и предпочитаем его иногда по использованию PCLs (портативные библиотеки классов), поскольку это - гибкость.

0
добавлено
Вы оказываетесь перед необходимостью делать это в некоторой степени, если у вас есть какая-либо платформа определенный код. Используя PCLs хорошая идея (как Стюарт, предлагает), но необходимо будет все еще погасить интерфейсы на каждой платформе.
добавлено автор jonathanpeppers, источник
Если я добавляю Android и iOS определенный код, wouldn' t, которые означают что я привычка быть в состоянии сослаться на эту библиотеку в любом проекте? Имея две библиотеки (iOS и Android) и "связь - в" файлах между ними кажется меньше, чем идеал. Спасибо.
добавлено автор Alex, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Xamarin Developers
Xamarin Developers
1 050 участник(ов)

Чат разработчиков приложений на Xamarin для iOS, Android и Windows 10!

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)