Quindi la mia azienda proviene da un ambiente completamente C# .Net, quindi naturalmente stiamo guardando a Mono per lo sviluppo mobile. Abbiamo una libreria di piattaforme Windows molto estesa che sono riuscito a portare quasi tutto come libreria di classi Android. L'idea è che questa libreria di classi Android sarà la nostra libreria di piattaforme mobili che può essere riutilizzata in futuro per MonoTouch (non ho testato, ma ho letto che il progetto MonoTouch può fare riferimento alle librerie di classi Android purché non ci sia alcun codice specifico per Android). All'interno della libreria, però, ci sono un sacco di istruzioni di registrazione, che per l'ambiente Windows finiscono per essere istruzioni di tracciamento (racchiuse in una classe helper personalizzata). Vogliamo mantenere le dichiarazioni di registrazione e basate sull'ambiente corrente (iOS o Android), traducendole semplicemente in registrazione nativa.Libreria condivisa per MonoDroid e MonoTouch
Avevo intenzione di utilizzare dichiarazioni parziali per la registrazione nella libreria della piattaforma mobile e le librerie specifiche per Android e iOS contengono le implementazioni per quei metodi di registrazione parziale. Ma questo si è spezzato quando ho realizzato che i partial non funzionano tra le assemblee.
Quindi ora non sono sicuro su come procedere. L'unica cosa che posso pensare se ho due librerie di piattaforme iOS e Android separate e che collegano gli stessi file. (Xamarin potrebbe avere una classe di registrazione che esegue questa operazione ma dobbiamo ancora elaborare uno schema per eventuali altre astrazioni future)
Qualsiasi consiglio è apprezzato. Siamo ancora nella fase di sperimentazione/pianificazione, quindi c'è la possibilità di trascurare qualcosa, per favore fateci sapere se questo è il caso.
Grazie.
Modifica
Diciamo che ho la seguente classe statica semplice.
public static class TraceHelper
{
public static void WriteLine(string message)
{
// Validation and preprocessing
Trace.WriteLine(message);
}
}
E ho centinaia di chiamate a questo metodo all'interno della libreria della piattaforma mobile. Ora diciamo che faccio riferimento a questa libreria nella mia applicazione Android, esiste un modo per sovrascrivere l'implementazione di TraceHelper.WriteLine() senza modificare la libreria stessa?
Aggiornamento
Abbiamo finito con la creazione di librerie Android e iOS che implementavano la funzionalità .NET mancante. Basta avvolgere la funzionalità equivalente nativa, nello stesso spazio dei nomi e classe .NET. 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);
}
}
}
Non sono sicuro di poter offrire un consiglio concreto poiché non si desidera modificare le dichiarazioni di registrazione. Nella mia azienda, stiamo condividendo il codice tra Windows/Silverlight/Android/Unity3D, ma abbiamo astratto la nostra implementazione di registrazione con un'interfaccia riutilizzabile. Come parte del bootstrap dell'applicazione, alleghiamo un logger specifico per la piattaforma dietro le quinte. Pertanto, tutto il nostro codice che accede al logger raggiunge un'interfaccia 'ILog' riutilizzabile tramite una fabbrica statica e non ha alcuna conoscenza delle specifiche della piattaforma utilizzate. (aiuta anche ad allegare logger diversi all'interno della stessa piattaforma, se lo desideri) –
(continua) Ovviamente, questo probabilmente significherebbe che dovresti cambiare il modo in cui registri dalla tua logica aziendale. Forse dovresti pubblicare un esempio di codice su come il tuo livello di business/UI _currently_ logs e in quale misura (se esiste) sei disposto a cambiarlo. –
Chris - 100% d'accordo con i tuoi commenti - dovresti scriverlo come risposta. – Stuart