所以我的公司完全来自一个 C# .Net 环境,所以我们自然而然地将 Mono 用于移动开发。我们有一个非常广泛的 Windows 平台库,我可以将其中的大部分移植为 Android 类库。这个想法是这个 Android 类库将成为我们的移动平台库,将来可以为 MonoTouch 重用(尚未测试,但只要没有 Android 特定代码,MonoTouch 项目就可以引用 Android 类库)。不过,在库中,有很多日志语句,对于 windows 环境,这些语句最终只是跟踪语句(包装在自定义帮助程序类中)。我们希望保留日志记录语句并基于当前环境(iOS 或 Android),只需将它们转换为原生日志记录。
我计划在移动平台库中使用部分声明进行日志记录,并让 Android 和 iOS 特定库包含这些部分日志记录方法的实现。但是当我意识到部分在程序集之间不起作用时,这种情况就崩溃了。
所以现在我不知道该怎么做。如果有两个独立的 iOS 和 Android 平台库并链接相同的文件,我唯一能想到的。(Xamarin 可能有一个日志类可以做到这一点,但我们仍然需要为未来的任何其他抽象提出一个模式)
任何建议表示赞赏。我们仍处于实验/计划阶段,因此我们可能会忽略某些东西,如果是这种情况,请告诉我们。
谢谢。
编辑
假设我有以下简单的静态类。
public static class TraceHelper
{
public static void WriteLine(string message)
{
// Validation and preprocessing
Trace.WriteLine(message);
}
}
我在移动平台库中有数百次调用此方法。现在假设我在我的 Android 应用程序中引用了这个库,有没有办法在不修改库本身的情况下覆盖 TraceHelper.WriteLine() 的实现?
更新
我们最终创建了实现缺失的 .NET 功能的 Android 和 iOS 库。只需将本机等效功能包装在相同的 .NET 命名空间和类中。前任:
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);
}
}
}