我正在为现有软件项目编写 API。我的 API 通常仅充当包装器,并将函数调用直接发送到软件逻辑。当然我想避免编写重复的代码。因此,我的问题是如何使内部枚举/类/等对使用 API 的用户可见。
我会用一个小例子来解释:
内部逻辑:
namespace internlogic{
public class Log {
public enum Level = {All, Debug, Error, Fatal);
public static SetLogLevel(Level lvl){
...
}
}
}
API:
namespace API {
public class APILog {
public SetLogLevel(internlogic.Level lvl)
internlogic.Log.SetLogLevel(lvl);
}
}
外部用户现在仅使用 API 命名空间,我正在寻找他可以使用枚举级别的可能性。是否可以将此枚举包含到 API 命名空间中而不编写“包装器枚举”?我想避免用户必须包含很多不同的命名空间。
外部 API 用户:
using namespace API;
...
Level loglvl = Level.Debug //Its not possible because Level is not in the API namespace
APILog.setLogLevel(loglvl);
...
到目前为止,还没有实现内部逻辑的访问控制。
只是举个例子。这就是我在评论中通过创建 API-LogLevel-Enum 的意思:
namespace API
{
public enum LogLevel
{
All, Debug, Error, Fatal
}
internal static class LogLevelExtension
{
internal static internlogic.Log.Level GetLevel(this LogLevel level)
{
switch (level)
{
case LogLevel.All:
return internlogic.Log.Level.All;
case LogLevel.Debug:
return internlogic.Log.Level.Debug;
case LogLevel.Error:
return internlogic.Log.Level.Error;
case LogLevel.Fatal:
return internlogic.Log.Level.Fatal;
default:
throw new Exception("This shoudn't happen! : )");
}
}
}
}
你可以这样使用它:
public void DoSomething(LogLevel level)
{
internlogic.Log.Level internLevel = level.GetLevel();
...
}