visual tutorial studio microsoft documentacion docs ios xamarin.ios xamarin.android xamarin

ios - tutorial - xamarin visual studio 2013



Cross Platform Logging en Xamarin (2)

Estoy buscando una utilidad de registro como NLog, Log4Net, etc ... que me permita iniciar sesión en mi Xamarin.Andriod, Xamarin.IOS y un proyecto Xamarin.PCL. Todos los registradores que he visto hasta ahora no son compatibles con los proyectos PCL por varias razones (la mayoría alrededor de File IO). ¿Hay soluciones disponibles para admitir el registro de forma multiplataforma, incluidos los proyectos PCL? Si no es así, ¿cómo ha implementado el registro en PCL (patrones de diseño, etc ...)?

Gracias


En absoluto no hay solución multiplataforma. Puedes resolverlo utilizando servicios. Así que cree la interfaz ILogging y describa todos los métodos que necesita para el registro. Luego implemente el registro que implementa ILogging en cada plataforma. Después de eso en cada plataforma en la configuración registrarlo

Mvx.RegisterSingleton<ILogging >(new Logging());

Después de eso, puedes acceder fácilmente a él desde el proyecto principal.

Mvx.Resolve<ILogging>();


Usted querría usar la inyección de dependencia si no hay registradores PCL. El siguiente es solo un concepto (aunque funciona) con dos implementaciones de muestra (Android Log y base de datos SQLite).

Interfaz abstracta cerca de la clase de registro de Android: https://github.com/sami1971/SimplyMobile/blob/master/Core/SimplyMobile.Core/Logging/ILogService.cs

Implementación específica de Android, una envoltura alrededor de la clase de registro: https://github.com/sami1971/SimplyMobile/blob/master/Android/SimplyMobile.Android/Logging/LogService.cs

Implementación de PCL para el registro de la base de datos con una dependencia del proveedor de CRUD: https://github.com/sami1971/SimplyMobile/blob/master/Core/SimplyMobile.Core/Data/DatabaseLog.cs

Contenedor del proveedor de CRUD para SQLite.Net.Async biblioteca compatible con PCL (disponible para iOS, Android y WP8): https://github.com/sami1971/SimplyMobile/blob/master/Core/Plugins/Data/SimplyMobile.Data.SQLiteAsync/SQLiteAsync.cs

Envoltorio del proveedor de CRUD para ServiceStack.OrmLite (disponible para iOS y Android): https://github.com/sami1971/SimplyMobile/blob/master/Core/Plugins/SimplyMobile.Data.OrmLite/OrmLite.cs

En el nivel de la aplicación, use el contenedor IoC para registrar los servicios que desea utilizar. El ejemplo es para WP8 pero para usarlo para iOS y Android solo necesitaría cambiar la plataforma ISQLite.

DependencyResolver.Current.RegisterService<ISQLitePlatform, SQLitePlatformWP8>() .RegisterService<IJsonSerializer, SimplyMobile.Text.ServiceStack.JsonSerializer>() .RegisterService<IBlobSerializer>(t => t.GetService<IJsonSerializer>().AsBlobSerializer()) .RegisterService<ILogService>(t => new DatabaseLog( new SQLiteAsync( t.GetService<ISQLitePlatform>(), new SQLiteConnectionString( Path.Combine(ApplicationData.Current.LocalFolder.Path, "device.log"), true, t.GetService<IBlobSerializer>()) )));

Por supuesto, usar el contenedor de registro de Android sería mucho más sencillo, ya que no tiene ninguna dependencia:

DependencyResolver.Current.RegisterService<ILogService, LogService>();