Donc, ma société vient d'un environnement complètement C# .Net, donc naturellement nous regardons Mono pour le développement mobile. Nous avons une bibliothèque de plate-forme Windows très étendue, que j'ai pu porter en grande partie sous la forme d'une bibliothèque de classes Android. L'idée étant que cette bibliothèque de classes Android sera notre bibliothèque de plates-formes mobiles qui pourra être réutilisée à l'avenir pour MonoTouch (N'avez pas testé, mais lisez ce projet MonoTouch peut référencer les bibliothèques de classes Android tant qu'il n'y a pas de code spécifique Android). Cependant, dans la bibliothèque, il y a beaucoup d'instructions de journalisation, qui pour l'environnement Windows finissent par être des instructions de suivi (enveloppées dans une classe d'assistance personnalisée). Nous souhaitons conserver les instructions de journalisation et, en fonction de l'environnement actuel (iOS ou Android), les convertir en journalisation native. Je prévoyais d'utiliser des déclarations partielles pour la journalisation dans la bibliothèque de la plateforme mobile et de faire en sorte que les bibliothèques spécifiques à Android et à iOS contiennent les implémentations pour ces méthodes de journalisation partielle. Mais cela s'est effondré quand j'ai réalisé que les partiels ne fonctionnaient pas entre les assemblées.Bibliothèque partagée pour MonoDroid et MonoTouch
Alors maintenant, je ne suis pas sûr de savoir comment s'y prendre. La seule chose à laquelle je peux penser est d'avoir deux bibliothèques de plate-forme iOS et Android séparées et de relier les mêmes fichiers. (Xamarin peut avoir une classe de journalisation qui fait cela mais nous devons toujours trouver un modèle pour toutes les autres abstractions futures)
Tout conseil est apprécié. Nous sommes encore dans la phase d'expérimentation/planification donc il y a une chance que nous puissions négliger quelque chose, s'il vous plaît laissez-nous savoir si c'est le cas.
Merci.
Édition
Disons que j'ai la classe statique simple suivante.
public static class TraceHelper
{
public static void WriteLine(string message)
{
// Validation and preprocessing
Trace.WriteLine(message);
}
}
Et j'ai des centaines d'appels à cette méthode dans la bibliothèque de plate-forme mobile. Maintenant disons que je référence cette bibliothèque dans mon application Android, est-il possible de surcharger l'implémentation de TraceHelper.WriteLine() sans modifier la bibliothèque elle-même?
Mise à jour
Nous avons fini par créer des bibliothèques Android et iOS qui a implémenté la fonctionnalité .NET manquantes. Juste enveloppez la fonctionnalité équivalente native, dans le même espace de noms et 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);
}
}
}
Je ne sais pas si je peux donner des conseils concrets puisque vous ne voulez pas modifier vos relevés de connexion. Dans mon entreprise, nous partageons du code entre Windows/Silverlight/Android/Unity3D, mais nous avons extrait notre implémentation de journalisation avec une interface réutilisable. Dans le cadre de l'amorçage de l'application, nous attachons un enregistreur spécifique à la plate-forme dans les coulisses. Ainsi, tout notre code qui accède à l'enregistreur frappe une interface 'ILog' réutilisable via une usine statique et n'a aucune connaissance des spécificités de la plate-forme utilisées. (aide également à attacher différents enregistreurs au sein de la même plateforme que vous le souhaitez) –
(suite) Bien sûr, cela signifierait probablement que vous deviez changer la façon dont vous vous connectez à partir de votre logique métier. Vous devriez peut-être publier un exemple de code sur la façon dont votre entreprise/votre couche d'interface utilisateur _currently_ se connecte et dans quelle mesure (le cas échéant) vous êtes prêt à changer cela. –
Chris - 100% d'accord avec vos commentaires - vous devriez l'écrire comme une réponse. – Stuart