Also mein Unternehmen kommt aus einer komplett C# .Net-Umgebung, so natürlich betrachten wir Mono für die mobile Entwicklung. Wir haben eine sehr umfangreiche Windows-Plattform-Bibliothek, die ich größtenteils als Android-Klassenbibliothek portieren konnte. Die Idee ist, dass diese Android-Klassenbibliothek unsere mobile Plattform-Bibliothek sein wird, die in Zukunft für MonoTouch wiederverwendet werden kann (nicht getestet, aber gelesen, dass MonoTouch-Projekt Android-Klassenbibliotheken referenzieren kann, solange es keinen Android-spezifischen Code gibt). Innerhalb der Bibliothek gibt es jedoch viele Logging-Anweisungen, die für die Windows-Umgebung einfach Trace-Anweisungen sind (eingepackt in eine benutzerdefinierte Helper-Klasse). Wir möchten die Logging-Anweisungen beibehalten und basierend auf der aktuellen Umgebung (iOS oder Android) diese nur in die native Protokollierung übersetzen.Gemeinsam genutzte Bibliothek für MonoDroid und MonoTouch
Ich plante, partielle Deklarationen für die Protokollierung in der mobilen Plattformbibliothek zu verwenden, und die spezifischen Bibliotheken für Android und iOS enthalten die Implementierungen für diese partiellen Protokollierungsmethoden. Aber das fiel auseinander, als ich realisierte, dass Teiltöne zwischen Assemblys nicht funktionieren.
So jetzt bin ich mir nicht sicher, wie man das macht. Das einzige, was mir einfällt, wenn ich zwei separate iOS- und Android-Plattform-Bibliotheken habe und dieselben Dateien verlinke. (Xamarin könnte eine Protokollierungsklasse haben, die dies tut, aber wir müssen immer noch ein Muster für andere zukünftige Abstraktionen entwickeln)
Jeder Rat wird geschätzt. Wir befinden uns immer noch in der Experimentier-/Planungsphase, also besteht die Möglichkeit, dass wir etwas übersehen. Bitte lassen Sie uns wissen, wenn dies der Fall ist.
Danke.
Bearbeiten
Sagen wir, ich habe die folgende einfache statische Klasse.
public static class TraceHelper
{
public static void WriteLine(string message)
{
// Validation and preprocessing
Trace.WriteLine(message);
}
}
Und ich habe Hunderte von Anrufen zu dieser Methode innerhalb der mobilen Plattform-Bibliothek. Sagen wir nun, dass ich diese Bibliothek in meiner Android-Anwendung referenziere, gibt es eine Möglichkeit, die Implementierung von TraceHelper.WriteLine() außer Kraft zu setzen, ohne die Bibliothek selbst zu modifizieren?
aktualisiert
Wir beenden Android und iOS Bibliotheken Erstellen up, die die fehlende .NET-Funktionalität implementiert. Umbrechen Sie die systemeigene äquivalente Funktionalität in demselben .NET-Namespace und derselben Klasse. 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);
}
}
}
Ich bin mir nicht sicher, ob ich konkrete Ratschläge geben kann, da Sie Ihre Logging-Anweisungen nicht ändern wollen. In meiner Firma teilen wir auch Code zwischen Windows/Silverlight/Android/Unity3D, aber wir haben unsere Logging-Implementierung mit einer wiederverwendbaren Schnittstelle abstrahiert. Im Rahmen des Application-Bootstrappings fügen wir einen plattformspezifischen Logger hinter die Kulissen ein. Daher trifft unser gesamter Code, der auf den Logger zugreift, eine wiederverwendbare "ILog" -Schnittstelle über eine statische Fabrik und hat keine Kenntnis von den verwendeten Plattformspezifikationen. (hilft auch, verschiedene Logger innerhalb der gleichen Plattform wie gewünscht anzufügen) –
(Forts.) Natürlich würde das wahrscheinlich bedeuten, dass Sie die Art, wie Sie von Ihrer Geschäftslogik abmelden müssen, ändern müssen. Vielleicht sollten Sie ein Codebeispiel veröffentlichen, in dem Ihr Geschäfts-/UI-Layer _currently_ protokolliert wird und in welchem Umfang (sofern vorhanden) Sie dies ändern möchten. –
Chris - 100% stimmen mit Ihren Kommentaren überein - Sie sollten es als Antwort schreiben. – Stuart