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